2
我有兩個類:實體框架許多一對多帶附加列
public class Address
{
public Guid Id { get; set; }
public virtual ICollection<ToAddressMessageLink> MessagesTo { get; set; }
public virtual ICollection<CopyAddressMessageLink> MessagesCopyTo { get; set; }
}
public class Message
{
public Guid Id { get; set; }
public virtual ICollection<ToAddressMessageLink> To { get; set; }
public virtual ICollection<CopyAddressMessageLink> CopyTo { get; set; }
}
,我需要保存在單表它們之間的連接。 如果我只是簡單地把多對多關係放在一起,那麼Ef就不會意識到實際設置了什麼類型的連接(表格行將與它們相同)。 所以我要創建一個鑑別的鏈接類似以下內容:
public class AddressMessageLink
{
public int LinkType { get; set; }
public Guid AddressId { get; set; }
public Guid MessageId { get; set; }
}
但它也犯規wokr因爲我不能設置鏈接類型/ 所以我要在這裏使用TPH:
public abstract class AddressMessageLink
{
public int LinkType { get; set; }
public Guid AddressId { get; set; }
public Guid MessageId { get; set; }
}
public class CopyAddressMessageLink : AddressMessageLink
{
public virtual AddressDto Address { get; set; }
public virtual MessageDto Message { get; set; }
}
public class ToAddressMessageLink : AddressMessageLink
{
public virtual AddressDto Address { get; set; }
public virtual MessageDto Message { get; set; }
}
隨着複合鍵
HasKey(x=>new {x.AddressId, x.MessageId, x.LinkType});
但它不擦出火花,因爲EF:對類型TOADD「國外關鍵部件AddressId未聲明的屬性ressMessageLink」。
如果我把AddressId和MessageId放到派生類中,我不能設置鍵值,因爲在基類中沒有它的組件。
我該怎麼做這種情況?
它會在這種情況下工作,但如果我添加ICollection類型的另一個屬性,它會導致「關係Address_MessagesTo」未加載,因爲類型不可用「 –
告訴我,你想要什麼那麼,這種類型的另一個屬性呢? 您只能在一個對象中定義此類型的一個屬性。 –
'(公共類地址 { 公共的Guid ID爲{得到;集;} 公共虛擬的ICollection MessageTo {得到;集;} 公共虛擬的ICollection MessageCopyTo {得到;集;} } 公共類消息 { 公共的Guid ID爲{得到;集;} 公共虛擬的ICollection 地址{得到;集;} public虛擬的ICollection CopyToAddress {得到;集;}} )' –