2016-09-15 272 views
4

我有一個場景,我最佳需要兩個實體之間的1對1關係。我可以用EF做到這一點,但最終結果是一個模型,我無法插入任何數據,因爲實體框架不知道首先插入哪一個數據。即使將關係更改爲0..1到0..1,也會發生同樣的情況。實體框架1對1關係?

舉個例子吧。我有一個實體文件和一個實體FileData。文件應始終有一個FileData和FileData應始終有一個文件引用。我不希望這些與FileData相同的實體(表格)能夠變得相當大,而且我大多隻需要來自實體File的內容。

我想指定兩個級聯之間的刪除,這樣如果我刪除一個文件,相關的FileData也會被刪除。

我也想能夠插入他們兩個在一個事務中,所以我可以寫

new File { FileData = ... 

所以你寧願與實體框架的解決方案?目前,我只向文件添加了關係。通過這種方式,我可以一次性將兩個實體提交給數據庫,但由於主要記錄是FileData,所以我不會在級聯上刪除,並且級聯對我的用例起作用「錯誤的方式」。

+0

你可以展示你的模型代碼嗎? – Sampath

+0

正在從數據庫中爲您生成模型嗎?如果是這樣,那麼在數據庫中創建相關表格,使用適當的外鍵添加索引以及最後點擊幾個按鈕即可自動生成模型會更容易。 –

+0

你可以使用這個github項目作爲示例。檢查File-FileData關係。這種關係的現狀有一些問題,但我希望這是我在這裏描述的。 https://github.com/antsim/EntityFrameworkTester –

回答

4

配置1-1船的關係,你,有這樣

// Configure FirstClassID as PK for SecondClass 
    modelBuilder.Entity<SecondClass>() 
     .HasKey(m => m.FirstClassId); 

    // Configure FirstClassId as FK for SecondClass 
    modelBuilder.Entity<FirstClass>() 
       .HasRequired(m => m.SecondClass) 
       .WithRequiredPrincipal(m => m.FirstClass); 

這將導致FirstClassId配置它是在這兩個班的PrimaryKey和第二類的外鍵,即SecondClass是一個弱實體

你可以閱讀更多關於以一對一的關係here

希望這將幫助你

相關問題