首先在抽象父EF代码中包含对象列表

本文关键字:包含 对象 列表 代码 EF 抽象 | 更新日期: 2023-09-27 18:17:12

我有一个名为Businessabstract类,它看起来像这样:

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

但是它不起作用,它说Supplier上没有Addresses属性

首先在抽象父EF代码中包含对象列表

如果您将集合从IEnumerable更改为ICollection,您的代码应该可以正常工作

由于基类是抽象的,所以必须实现重写。

从MSDN

"标记为抽象或包含在抽象类中的成员必须由派生自抽象类的类实现"

或者删除abstract关键字,以便默认情况下使用基。

另一种选择是,删除基类并使用接口,除非您有使用抽象类的特定原因。