2013-07-08 37 views
0

我是EF新手,因此需要創建或使用參考表中的按鍵。 用戶可以在參考表中創建新記錄或可以使用現有記錄。對於我創建了我的實體模型,如下圖所示:EF:如何重新使用新創建的外鍵

Public class MaterialLineEntry() 
{ 
    EntryNumber = 0, 
    OrganisationID=0, 
    Organisation Organisation 
    }; 

Public class Organisation() 
    { 
    ID = 0,        
    Description = "Test", 
    EntityChangeStatus ; 
    }; 

這些行條目稱爲報告的另一個實體

Public class Report() 
{ 
     List< MaterialLineEntry> materilaLineEntries; 
}; 

一切工作正常,如果我進入裏面的定義詳細信息如下所示,並將對象(報告)附加到UnitOfWork並將其列出。實體框架在參考表中創建記錄,並使用新生成的外鍵將其輸入到行條目表中。

Report report =new Reort(); 
     report. materilaLineEntries.Add(new MaterialLineEntry() 
      { 
       EntryNumber=1, 
       OrganisationID=0, 
       Organisation=new Organisation() 
       { 
        ID = 0, 
        Description = "Test", 
        EntityChangeStatus = EntityChangeStatus.Unchanged, 
       } 
      }) 

,但是當我添加兩個對象與同一組織細節行條目:

report. materilaLineEntries.Add(new MaterialLineEntry() 
      { 
       EntryNumber=1, 
       OrganisationID=0, 
       Organisation=new Organisation() 
       { 
        ID = 0, 
        Description = "Test", 
        EntityChangeStatus = EntityChangeStatus.Unchanged, 
       } 
      }) 

它應該使用以前創建的外鍵(因爲我可以有一個獨特的constrant)。 因爲我想在參考表中插入重複的記錄。我在這裏需要的是,實體框架工作應該添加第一個組織細節,並且應該使用相同的ID來記錄相同記錄(在本例中爲描述欄)。

請幫我解決這個問題。提前致謝。 (我曾想過將數據逐個添加到外表中,並進一步使用外鍵,但我想這是一個壞主意)。

+0

我終於得到了解決f0r這一點,我們shud設置外鍵/參考對象一次,EF是足夠聰明的使用參考表的新生成的身份對任何consicutive使用(如果我們需要設置外鍵/引用對象) – chandrabhan

回答

0

您在MaterialLineEntry中擁有foreignkey「OrganizationId」。要重新使用現有的組織機構,您必須將現有ID僅分配給OrganizationId。例如

report. materilaLineEntries.Add(new MaterialLineEntry() 
      { 
       EntryNumber=1, 
       OrganisationID=0,//Id of a exsiting organization 

      }); 

編輯:全碼

Report report =new Reort(); 
var org=new Organisation() 
       { 
        Description = "Test", 
        EntityChangeStatus = EntityChangeStatus.Unchanged, 
       }; 
     report. materilaLineEntries.Add(new MaterialLineEntry() 
      { 
       EntryNumber=1, 
       OrganisationID=0, 
       Organisation=org 
      }); 
     report.SaveChanges(); 
     report. materilaLineEntries.Add(new MaterialLineEntry() 
       { 
        EntryNumber=1, 
        OrganisationID=org.Id,//Id of a exsiting organization 

       }); 
     report.SaveChanges(); 
+0

感謝nhrobin的回覆,如果我添加現有的「OrganizationId」,解決方案工作正常,但在我的情況下,我需要創建一個新組織並將其分配給細緻的線條。換行條目1我需要一個新的組織「XYZ」和行條目2我需要相同的組織「XYZ」。 – chandrabhan

+0

我已經爲您的方案添加了完整的代碼。希望能幫助到你。 – nhrobin

+0

這是一個好主意,但在我的場景中,我只能將整個對象發送到DAL,在那裏我可以保存更改或提交更改。所以我需要構建將它發送到DAL層的對象。我嘗試通過爲第一行輸入創建一個新的Ogranisation對象,並保留第二個爲null,它很好地支持;-),但現在如果我有三個行條目,第一個作爲新對象,第二個作爲空,第三個作爲新對象,但它給了我例外(無法確定'MaterialLineEntery_Organization'關係的主體端,多個添加的實體可能具有相同的主鍵) – chandrabhan