1

我在EF 4.1代碼優先的電子商務數據庫設計中蹣跚前行。實體框架4.1外鍵問題

我來的情況下,我認爲我是有道理的,但不知道..

考慮:

class Download 
{ 
    int ID 
    string Mime 
    string Filename 
    string Extension 
} 

class DownloadBinary 
{ 
    int ID 
    int DownloadID 
    Download Download 
    byte[] Binary 
} 

class DownloadURL 
{ 
    int ID 
    int DownloadID 
    Download Download 
    string URL 
} 

現在我已經放在外鍵下載的其他兩個班,因爲我基本上想刪除nulls。此外,這也有允許每個下載類的多個DownloadBinary和DownloadURL類的副產品,這似乎沒問題。但從EF的角度來看,這似乎是錯誤的,因爲Download類沒有封裝DownloadBinary和DownloadURL類。

我知道我可以搜索DbContext併爲給定的Download類ID取消DownloadBinary和DownloadURL類,所以我可以將數據取出。

如果我在下載類舉行DownloadBinary ID和DownloadURL ID,我可能會受到空,這是我點做這種方式..

我真的希望執行一個零或從我的數據輸入表格中下載到DownloadBinary或DownloadURL類中的一個關係。

我在這裏看不到很多問題,但更有經驗的人會怎麼看?

回答

1

來自DownloadBinaryDownloadUrl刪除DownloadID並映射這些類爲外鍵的DownloadIDID。 EF僅通過主鍵支持一對一關係,因爲它不支持唯一鍵。

modelBuilder.Entity<Download>() 
      .HasOptional(d => d.DownloadBinary) 
      .WithRequired(db => db.Download); 


modelBuilder.Entity<Download>() 
      .HasOptional(d => d.DownloadUrl) 
      .WithRequired(du => du.Download); 

兩個DownloadBinaryDownloadUrl不能在數據庫中使用自動生成的ID,因爲他們的ID由Download定義: modelBuilder.Entity() .Property(分貝=> db.ID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None );

modelBuilder.Entity<DownoladUrl>() 
      .Property(du => du.ID) 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
+0

你是男人! :D非常感謝,該方法聽起來正是我需要的:D –

+0

更奇怪,它不讓我說明外鍵約束?有任何想法嗎? –

+0

你得到了什麼錯誤? –