2015-07-02 59 views
1

目前,我已在在我的代碼如下:表分裂/可選關係

modelBuilder.Entity<Client>().HasRequired(e => e.Logo).WithRequiredPrincipal(); 

該關係定義用於表分裂標誌列(它是VARBINARY(MAX))到一個單獨的實體。一切都按預期工作。

我已選擇使數據庫中的空標誌列可用。我試圖更新上面列出的代碼:

modelBuilder.Entity<Client>().HasOptional(e => e.Logo).WithOptionalPrincipal(); 

當運行的代碼,我收到以下消息:

附加信息:實體類型「ClientLogo」和「客戶」不能共享表「的客戶',因爲它們不在同一個類型層次結構中,或者沒有有效的一對一外鍵關係,並且在它們之間具有匹配的主鍵。

問題是我不完全確定這封郵件是想告訴我什麼。爲什麼它在Logo列不可爲空但不工作時不起作用?我是否錯誤地映射了關係?

回答

1

即使Logo列是可選的,ClientLogoClient需求之間的實體關係保持不變,這是一個需要爲可以爲空的屬性本身:

// This should stay the same 
modelBuilder.Entity<Client>().HasRequired(e => e.Logo).WithRequiredPrincipal(); 

// If you used to have a line like this or a [Required] attribute, then it needs to be removed 
// modelBuilder.Entity<ClientLogo>().Property(t => t.Logo).IsRequired(); 
+0

謝謝你的答覆。我必須說,你的解決方案仍然讓我感到困惑。在EF中建立關係對我而言仍然有點神祕。我認爲拋棄我的是,對於這些類型的關係(表格拆分),即使不需要結束列,屬性的值(此例中的徽標)也不能爲null。無論如何,我將你的解決方案標記爲答案,因爲它讓我的代碼工作。 –

+0

@JasonRichmeier:我認爲,如果你想象一下'ClientLogo'不僅僅有一個屬性,而且'ClientLogo'不是必需的情況下的意義,那麼這可能會更有意義。在實體模型和數據庫表示之間進行處理時,會有更多邊緣案例需要處理。 – jjj