2016-11-09 1 views
0

Ich habe eine Klasse mit dem Namen abstractBusiness der wie folgt aussieht:Fügen Liste der Objekte auf abstrakt Eltern EF-Code Ersten

public abstract class Business 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string TaxNumber { get; set; } 
    public string Description { get; set; } 
    public string Phone { get; set; } 
    public string Website { get; set; } 
    public string Email { get; set; } 
    public bool IsDeleted { get; set; } 
    public virtual IEnumerable<Address> Addresses { get; set; } 
    public virtual IEnumerable<Contact> Contacts { get; set; } 
} 

Eine der Klassen, die von der oben erben die Supplier Klasse. Das sieht wie folgt aus:

public class Supplier : Business 
{ 
    public virtual ICollection<PurchaseOrder> PurchaseOrders { get; set; } 
} 

Alles ist gut, aber wenn ich komme, einen Anbieter für meine MVC-Front-End zu packen, würde Ich mag die Addresses mit dem Lieferanten zugeordnet sind.

Ich habe versucht, dieses:

public Supplier GetSupplier(int id) 
{ 
    return _context.Businesses.Include(b => b.Addresses).OfType<Supplier>().SingleOrDefault(x => x.Id == id); 
} 

Aber es funktioniert nicht, heißt es dort auf Supplier keine Addresses Eigenschaft ist.

Antwort

2

Wenn Sie Ihre Sammlung von IEnumerable ändern Sie Ihren Code iCollection sollten Was auf der Datenbank die Auswirkungen sind

+0

* Das hat funktioniert! * Danke. Warum war es falsch, IEnumerable <> 'zu verwenden? – Ciwan

+1

@Ciwan Werfen Sie einen Blick auf diese http://stackoverflow.com/questions/7655845/icollectiont-vs-listst-in-entity-framework –

+0

genial, danke. Es macht jetzt Sinn. – Ciwan

0

Sie müssen eine Überschreibung implementieren, da die Basisklasse abstrakt ist.

Von MSDN

„Mitglieder als abstrakt markiert oder in einer abstrakten Klasse enthalten sind, müssen von Klassen implementiert werden, die von der abstrakten Klasse ableiten“

Oder alternativ die abstrakte Schlüsselwort entfernen, so dass die Basis wird standardmäßig verwendet.

Eine andere Alternative, entfernen Sie die Basis und verwenden Sie stattdessen eine Schnittstelle, es sei denn, Sie haben einen bestimmten Grund für die Verwendung abstrakter Klassen.

+0

gut funktionieren, wenn ich eine Überschreibung verwenden? Im Augenblick erzeugt das obige eine einzelne Tabelle mit einer 'Diskriminator'-Spalte. – Ciwan

Verwandte Themen