【问题标题】:Why does creating an object when calling DB using Entity Framework result in "instances of abstract classes cannot be created" error?为什么使用Entity Framework调用DB时创建对象会出现“无法创建抽象类的实例”错误?
【发布时间】:2022-12-09 17:12:42
【问题描述】:

我有一个抽象的class OrderDetail 和 class Order 定义如下:

public class Order
{
    public OrderDetail Detail { get; set; }
}

我正在尝试查询数据库并获取订单列表,但出现“无法创建抽象类的实例”错误。但是,如果我直接测试创建新订单,那就没有问题了。

到目前为止,这是我测试过的内容:

通过案例

var success1 = new Order();

var success2 = new Order() { Detail = null };

var success3 = db.Invoice.Select(_ => new Order()).ToList();

失败案例

var fail = db.Invoice.Select(_ => new Order() { Detail = null }).ToList();

我正在使用 .NET Framework 4.8 和 Entity Framework 6.1.3。

【问题讨论】:

  • 为什么 OrderDetail 首先是抽象的?似乎很奇怪。
  • @jmcilhinney 它是实现 TPH 的数据库表的基类。在查询 OrderDetails 时,我也试图获取该表。示例中的名称可能有点误导,让我更新一下。
  • 您的目标是什么 .NET 版本?
  • @jmcilhinney 我正在使用 .NET Framework 4.8 和 Entity Framework 6.1.3。
  • 请把它变成minimal reproducible example。如果不猜测模型+数据库是什么样子,我们就无法重现这一点。

标签: c# entity-framework


【解决方案1】:

您不能实例化抽象类,因此得名。由于抽象,它被认为是不完整的。 您需要一个继承自抽象类的类。

来自Microsoft documentation

abstract 修饰符表示被修改的事物缺少或不完整的实现。 abstract 修饰符可以与类、方法、属性、索引器和事件一起使用。在类声明中使用 abstract 修饰符来指示一个类仅作为其他类的基类,而不是自行实例化。标记为抽象的成员必须由派生自抽象类的非抽象类实现。

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多