我继承了一个Web应用程序,用于定义实体之间关系的数据注释突然停止工作。
我尝试了各种各样的事情,我无法弄清楚为什么希望有人能够指出这个问题。
该应用程序使用SQLite数据库,并包含三(3)个基本表:
订单的实体如下所示:
[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协议,因此我们需要解决当前的问题。
任何想法都会受到欢迎。
更新
原始开发人员错误地创建了客户 - 订单关系。他说订单可以有多个客户,一个客户的实例有多个订单。
答案 0 :(得分:1)
我认为你错过了关系的概念。 你可以在这里找到帮助。试着去做一次,你就会完成。 http://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx