2016-11-09 57 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