我是EF的新人。 我正在使用EF6 Code First方法制作应用程序,我已经使我的所有POCO实体派生自定义Id的基类。 我不知道的是如何为处理多对多关系的实体声明构造函数。 例如:
我有这个实体:
public partial class ArqAppRole
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ApplicationId { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int RoleId { get; set; }
public DateTime SinceDate { get; set; }
public DateTime? UntilDate { get; set; }
public bool IsActive { get; set; }
public virtual ArqApplication ArqApplication { get; set; }
public virtual ArqRole ArqRole { get; set; }
}
这是由EF自动生成的,我想要的是将它的超类设置为BaseEntity类,它具有默认构造函数,用于设置Id,我不知道如何处理ArqApplication和ArqRole属性及其propper Ids
我的基类是:
public abstract class BaseEntity
{
private object _id;
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public object Id
{
get
{
return _id;
}
protected set
{
_id = value;
}
}
protected BaseEntity() : this(null) { }
protected BaseEntity(object id)
{
_id = id;
}
}
答案 0 :(得分:1)
您可以将Id保留在基类上,在此用例中,您必须使用Fluent API配置一对一的releshinship。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ArqAppRole>()
.HasRequired(s => s.Application)
.WithRequiredPrincipal(ad => ad.ArqAppRole);
}
Fluent API将首先覆盖您的代码。但是将Id放在基类中是一种不好的做法,你必须到处寻找技巧。只需使用传统方法并使用应该使用的EF。
更多信息:Code first self referencing foreign key (more than one)