EF 实体上的数据注释突然停止工作
Data annotations on EF entities suddenly stopped working
我继承了一个 Web 应用程序,用于定义实体之间关系的数据注释突然停止工作。
我尝试了很多方法,但我不明白为什么希望这里有人能指出问题。
该应用程序使用 SQLite 数据库,并包含三 (3) 个基本 table:
- 订单
- 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 table,在多对一的关系中与订单
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")] 属性添加到 "Orders",但这会引发异常,表明 属性 "OrderId" 无法在父角色 "order".
上找到
如果我们将 [InverseProperty("Orders")] 属性添加到 "OrderId" 属性,则会抛出异常,该列在 table.
中找不到 OrderClient_Id
order_entry和order_clienttable有一个foreign_key在数据库结构中使用 order 进行约束,我们确保了这一点。
我完全被难住了。不幸的是,我们无法将应用程序的当前实例移动到流畅 API,因为更改的影响超过了 SLA 协议,因此我们需要解决当前的问题。
欢迎任何想法。
更新
原开发者错误地创建了客户-订单关系。他说一个订单可以有多个客户,一个客户有多个订单的实例。
我认为您缺少关系的概念。
您可以在这里找到帮助。尝试完成一次,您就会完成。
http://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx
我继承了一个 Web 应用程序,用于定义实体之间关系的数据注释突然停止工作。
我尝试了很多方法,但我不明白为什么希望这里有人能指出问题。
该应用程序使用 SQLite 数据库,并包含三 (3) 个基本 table:
- 订单
- 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 table,在多对一的关系中与订单
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")] 属性添加到 "Orders",但这会引发异常,表明 属性 "OrderId" 无法在父角色 "order".
上找到如果我们将 [InverseProperty("Orders")] 属性添加到 "OrderId" 属性,则会抛出异常,该列在 table.
中找不到 OrderClient_Idorder_entry和order_clienttable有一个foreign_key在数据库结构中使用 order 进行约束,我们确保了这一点。
我完全被难住了。不幸的是,我们无法将应用程序的当前实例移动到流畅 API,因为更改的影响超过了 SLA 协议,因此我们需要解决当前的问题。
欢迎任何想法。
更新
原开发者错误地创建了客户-订单关系。他说一个订单可以有多个客户,一个客户有多个订单的实例。
我认为您缺少关系的概念。 您可以在这里找到帮助。尝试完成一次,您就会完成。 http://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx