我見過很多EF POCO示例,其中每個POCO類都繼承了一個基本實體類或實現了一個IEntity接口。爲什麼在EF庫模式下使用POCO的Base類?
我很明白爲什麼會這樣使用,但我看不出它會在所有情況下都能正常工作,除非我錯過了某些東西。
實體基類可能是這樣的:
public class Entity
{
#region Primitive Properties
[Key]
public int Id { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
[Timestamp]
public byte[] rowversion { get; set; }
#endregion
}
...和混凝土POCO類是這樣的:
public class BlogCategory : Entity
{
#region Properties
[Required(ErrorMessage = "Category Name is required.")]
public string CategoryName { get; set; }
public virtual ICollection<Blog> BlogList { get; set; }
#endregion
}
這是罰款時,我所有的類都包含一個單一的主鍵屬性,但是當我有多對多關係時會發生什麼?通常在多對多關係中,實體具有代表該實體主鍵的雙重屬性。
如:
public class ClaimQuestionAnswer : Entity <-- this will not work, will it?
{
[Key]
public int QuestionId { get; set; }
[Key]
public int AnswerId { get; set; }
public string Answer { get; set; }
public byte[] rowversion { get; set; }
}
將這個特殊的POCO不能繼承的基類?
任何澄清表示讚賞。
謝謝。
在你的例子中,我會做一個組合的唯一約束和一個單獨的PK,而不是一個組合的PK。 – Maess
@Maess:從數據庫的角度來看,這很好,但只要EF不支持唯一性約束,我不會這麼做。 EF不知道任何關於唯一約束的信息,您必須手動確保唯一性。這將是一個解決方案,只爲所有實體保留一個具有單個鍵基類的體系結構,但如果您在模型中自然具有組合鍵,則體系結構首先是錯誤的。 – Slauma
@Slauma,你是說在一個「連接」實體的情況下,它應該有一個Id主鍵,然後是兩個外鍵?目前似乎還沒有達成共識。 – Kahanu