2017-07-25 65 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