我已经看过很多EF POCO示例,其中每个POCO类都继承了一个基本实体类或实现了一个IEntity接口。
我有点理解为什么会这样使用,但我无法看到它会在所有情况下都有效,除非我错过了什么。
实体基类可能如下所示:
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会不会继承基类吗?
任何澄清都表示赞赏。
感谢。
答案 0 :(得分:1)
您可能只看到了不使用任何具有复合键的实体类的示例。否则他们遇到了你现在面临的同样问题。
多对多关系不是最好的例子,因为在真正的多对多关系中,连接表在模型中没有对应的实体。但是,您可能出于任何其他原因在实体中使用复合键,或者您可能拥有其键必须具有其他类型(string
,long
,Guid
或其他类型的实体的实体。
在这种情况下,您无法使用基类,因为该键不再是所有实体的公共属性。您可以将密钥移出基类并将其放入不同的派生类中 - 只有DateCreated
,DateModified
和rowversion
是常用属性。或者,您可以为正在使用的不同键类型创建多个基类。
这完全取决于您希望在所有实体中支持的常见属性。