【问题标题】:Include list of objects on abstract parent EF Code First在抽象父 EF Code First 上包含对象列表
【发布时间】:2023-03-23 03:59:01
【问题描述】:

我有一个名为 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 属性。

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    由于基类是抽象的,因此您必须实现覆盖。

    来自 MSDN

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

    或者删除abstract关键字,以便默认使用base。

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

    【讨论】:

    • 如果我使用覆盖对数据库有什么影响?现在上面正在生成一个带有Discriminator 列的表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多