EF实体上的数据注释突然停止工作

时间:2017-07-25 10:30:12

标签: c# sqlite data-annotations ef-database-first

我继承了一个Web应用程序,用于定义实体之间关系的数据注释突然停止工作。

我尝试了各种各样的事情,我无法弄清楚为什么希望有人能够指出这个问题。

该应用程序使用SQLite数据库,并包含三(3)个基本表:

  • 顺序
  • order_entry
  • order_client

订单的实体如下所示:

[Table("order")]
public class Order
{
    [Column("id")]
    public int Id { get; set; }

    public virtual ICollection<OrderEntry> OrderEntries { get; set; }

    [ForeignKey("Id")]
    public virtual OrderClient OrderClients { get; set; }

    public Order()
    {
        OrderEntries = new HashSet<OrderEntry>();
    }
}

没什么特别的。单个订单可以包含许多条目,但单个订单只能包含一个客户。

order_entry 的实体代码如下所示:

[Table("order_entry")]
public class OrderEntry
{
    [Column("id")]
    public int Id { get; set; }

    [Column("order_id")]
    public int OrderId { get; set; }

    [ForeignKey("OrderId")]
    public virtual Order Order { get; set; }
}

再一次,没什么特别的。单个条目只能属于一个订单。

OrderEntries运行良好,我们可以做一些基本的包含,没有问题:

ctx.Orders.Include(x => x.OrderEntries).ToList();

然而,问题在于 order_client 表,与订单的多对一关系。

order_client 实体:

[Table("order_client")]
public class OrderClient
{
    [Column("id")]
    public int Id { get; set; }

    [Column("order_id")]
    public int OrderId { get; set; }

    public virtual ICollection<Order> Orders { get; set; }

    public OrderClient()
    {
        Orders = new HashSet<Order>();
    }
}

我们已尝试将 [ForeignKey(“OrderId”)] 属性添加到“订单”,但这会引发异常,说明在“父级角色”中找不到属性“OrderId”令”。

如果我们将 [InverseProperty(“Orders”)] 属性添加到“OrderId”属性,则会抛出一个异常,即在表中找不到OrderClient_Id列。

order_entry order_client 表在数据库结构中有 order 的foreign_key约束,我们确保了这一点。

我完全被这里难住了。遗憾的是,我们无法将当前的应用程序实例移动到流畅的API,因为更改影响超过了SLA协议,因此我们需要解决当前的问题。

任何想法都会受到欢迎。

更新

原始开发人员错误地创建了客户 - 订单关系。他说订单可以有多个客户,一个客户的实例有多个订单。

1 个答案:

答案 0 :(得分:1)

我认为你错过了关系的概念。 你可以在这里找到帮助。试着去做一次,你就会完成。 http://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx