2017-07-25 92 views
0

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

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

应用程序使用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_entryorder_client表与数据库中的结构为了一个foreign_key约束,我们确信这一点。

我完全沉迷于此。不幸的是,我们无法将当前的应用程序实例移动到流畅的API上,因为变更影响大于SLA协议,因此我们需要解决当前的问题。

任何想法都会受到欢迎。

UPDATE

最初的开发者创建的客户端 - 顺序关系不正确。他表示一个订单可以有多个客户,一个客户有多个订单的实例。

回答

1

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

+0

感谢您的回应,但该网址根本无法帮助我们以数据库优先。我们用代码优先的方式尝试了他们在那里教的内容,并且它可以工作,但是我们有一个现有的数据库,其中包含我们不能丢失的数据,所以我们首先关闭了代码,这至少不适用于数据库 - 至少,这就是为什么我在这里。 – JadedEric

+0

这个URL本身并没有帮助,但是你指出了这个问题,而且我一开始就看不到它。感谢您的帮助,非常感谢。 – JadedEric