2016-11-09 52 views
0

對象的名單上有一個名爲Businessabstract類,看起來像這樣:包括抽象父EF代碼第一次

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; } 
} 

一個從上面繼承是Supplier類的類。這看起來是這樣的:

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

一切都很好,但是當我來到搶一個供應商對我的MVC的前端,我想包括與供應商相關的Addresses

我嘗試這樣做:

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

但它不工作,它說沒有Addresses財產上Supplier

回答

2

如果你自IEnumerable改變你的集合ICollection的代碼應該工作正常

+0

*工作!*謝謝。爲什麼使用IEnumerable <>'是錯誤的? – Ciwan

+1

@Ciwan看看這個http://stackoverflow.com/questions/7655845/icollectiont-vs-listt-in-entity-framework –

+0

真棒,謝謝。現在有道理。 – Ciwan

0

由於基類是抽象的,所以必須實現覆蓋。

從MSDN

「成員標記爲抽象的或包括在一個抽象類,必須通過從抽象類派生的類來實現」

或替代地移除抽象關鍵字,使得所述鹼是默認使用。

另一種替代方法是,除非您有使用抽象類的具體原因,否則請除去基礎並使用接口。

+0

哪些數據庫上的影響,如果我使用替代?現在,上面正在生成一個帶有「Discriminator」列的單個表格。 – Ciwan