2017-05-26 131 views
0

(注意 - 我無法控制數據庫及其表格)。無外鍵約束的實體框架關係

給出我的問題的一個例子:

表A上有ID(PK)和CREATEDATE 表B上有ID(PK)和A_ID

A_ID不是外鍵,但表B需要從表A獲取create_date。我如何在Entity Framework中執行此操作?

不知道這是否是相關的,但一個可以有0個或多個B和B只能有一個

編輯之一:忘記用流利的API提

編輯2:我已經試過映射這兩個表。

我在B的實體模型上添加了public virtual A {get; set}。 (x => xA).WithOptional()和HasRequired(x => xA).WithMany()。HasForeignKey(x => xA)返回實體配置, > x.A_ID)(即使有很多錯誤,但它是我看到如何指定外鍵的唯一方式,也知道沒有外鍵)。我還添加了HasKey(x => x.A_ID),但對我來說這似乎不正確。

基本上,我嘗試了每種類型的Has和With。我對於實體框架流暢的api仍然很陌生,但是我搜索了互聯網,發現了類似的問題,但是並不足以幫助我想出答案。大多數情況下,我發現'這是不可能的'類型的答案。

就加入而言,糾正我,如果我錯了,這不是流利的API,它不是互相映射表?我會加入我的方法內的表?

編輯3:刪除實體模型和實體配置到目前爲止,不必要的東西和事物名稱變更(但除此之外,它是完全準確)

public class A 
{ 
    /// <summary> 
    ///  ID 
    /// </summary> 
    public virtual int ID { get; set; } 

    /// <summary> 
    ///  Relationship to B 
    /// </summary> 
    public virtual B b { get; set; } 
} 

public class B 
{ 
    /// <summary> 
    ///  ID of B 
    /// </summary> 
    public virtual int ID { get; set; } 

    /// <summary> 
    ///  Name of B 
    /// </summary> 
    public virtual string Name { get; set; } 

    /// <summary> 
    ///  DateTime B is created 
    /// </summary> 
    public virtual DateTime? DateTime { get; set; } 
} 

    public AConfiguration() 
    { 
     Property(x => x.ID).HasColumnName("a_id"); 
     Property(x => x.B_ID).HasColumnName("b_id"); 

     HasKey(x => x.ID); 

     ToTable("a", "safe"); 
    } 

    public BConfiguration() 
    { 
     Property(x => x.ID).HasColumnName("b_id"); 
     Property(x => x.DateTime).HasColumnName("b_datetime"); 
     HasKey(x => x.ID); 

     ToTable("b", "safe"); 
    } 
+0

所以你想要一個約束,但不是在數據庫上? – Stefan

+0

我認爲答案是肯定的。我想把a_id當作外鍵,即使數據庫沒有(它應該是,但由於某種原因,它不是這樣設置的)。 – sam

+0

你嘗試過什麼嗎?如果沒有,你應該。如果是的話,你應該告訴我們什麼不按預期工作。 – Tipx

回答

0

如果您遇到了流暢的映射麻煩導航屬性,請嘗試創建一個示例數據庫,確實有具有外鍵,並從中生成代碼優先模型。這應該會告訴你正確的配置。

+0

這將是有益的,謝謝你的建議! – sam