從早期的帖子今天繼:配置多個1〜0..1關係
Entity framework one to zero or one relationship without navigation property
Understanding ForeignKey attribute in entity framework code first
我現在想配置以下關係:
Item1具有可選的RawData Item2具有可選的RawData Item3具有可選的RawData
RawData必須附加到Item1,Item2或Item3 - 它不會被期望獨立存在。
目前的結構是:
class ItemX
{
[Key]
public int Id { get; set; }
public int? RawDataId { get; set; }
[ForeignKey("RawDataId")]
public virtual RawData RawData { get; set; }
}
public class RawData
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
//other properties
}
我想這可能通過以下方式配置:
modelBuilder.Entity<Item1>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true);
modelBuilder.Entity<Item2>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true);
modelBuilder.Entity<Item3>().HasOptional(d => d.RawData).WithOptionalPrincipal().WillCascadeOnDelete(true);
但是這給了以下錯誤:
The ForeignKeyAttribute on property 'RawData' on type 'Item1' is not valid. The foreign key name 'RawDataId' was not found on the dependent type 'RawData'.
這是相同的我今天在一篇較早的帖子中討論過的錯誤。在那個人中,我明白了由於共享主鍵而無法工作的原因。但是在這個例子中情況並非如此,因爲RawData不能與Item1共享主鍵,因爲Item2可能具有相同的ID。
感謝您的任何幫助。
編輯
我得到它的工作使用:
modelBuilder.Entity<Item1>().HasOptional(d => d.RawData).WithMany().HasForeignKey(d=>d.RawDataId).WillCascadeOnDelete(true);
//etc.
數據庫看起來確定。似乎有點奇怪被描述爲WithMany,但也許這是什麼時候需要什麼時候是多重關係?
我可以看到這是如何幫助定義關係,但它不應該是可能的,而不導航屬性? – Mark007
似乎工作,如果我在流利的API中描述爲WithMany(),但這在原理上似乎是錯誤的.. – Mark007
適應習慣有點奇怪,但嘗試它。它會工作。你甚至不需要流利的API中的任何代碼。 – pquest