C# 如何使这个基类首先与EntityFramework6.1代码一起工作
我有一个基类,如下所示:C# 如何使这个基类首先与EntityFramework6.1代码一起工作,c#,entity-framework,ef-code-first,C#,Entity Framework,Ef Code First,我有一个基类,如下所示: public abstract class BaseEntity { [Required] public DateTime Created { get; set; } public DateTime Modified { get; set; } [Required] public int CreatedByUserId { get; set; } public int ModifiedByUserId { get; se
public abstract class BaseEntity
{
[Required]
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
[Required]
public int CreatedByUserId { get; set; }
public int ModifiedByUserId { get; set; }
[ForeignKey("CreatedByUserId")]
public virtual User CreatedBy { get; set; }
[ForeignKey("ModifiedByUserId")]
public virtual User ModifiedBy { get; set; }
}
我想用这个类作为其他类的基础。也适用于用户类,因为用户是由其他用户创建和修改的
public class User : BaseEntity
{
[Key]
public int UserId { get; set; }
....
}
但我得到了这个错误:
必须使用关系fluent API或数据注释显式配置此关联的主体端
我研究了错误,一切都变得很清楚。EF必须被告知这些实体之间的关系,以及先保存哪个实体,然后保存哪个实体。但在所有的例子/解决方案中,我没有发现任何类似的情况。有人能帮我解决这个问题吗?我希望通过使用数据注释来修复这个问题 我不知道有什么好的数据注释解决方案,但是使用fluentapi可以非常清楚地帮助您。您应该在DbContext类中重写OnModelCreating方法
public class MyDbContext : DbContext
{
DbSet<User> Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.HasRequired<User>(x => x.CreatedBy)
.WithMany();
modelBuilder.Entity<User>()
.HasRequired<User>(x => x.ModifiedBy)
.WithMany();
}
}
公共类MyDbContext:DbContext
{
DbSet用户{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasRequired(x=>x.CreatedBy)
.有许多();
modelBuilder.Entity()
.has必需(x=>x.ModifiedBy)
.有许多();
}
}
这就是你如何描述两种自我参照的一对多关系。谢谢,这很有效。但仍对数据批注是否可以实现这一点感到好奇。@Tys,要描述与数据批注的一对多关系,您应该在“一”端创建一个集合。您可以尝试添加类似于
List EntitiesCreatedByUser
的属性[InverseProperty(“CreatedBy”)]
和将实体ModifiedByser
与[InverseProperty(“ModifiedBy”)]
一起列出给用户类。但是,您需要将Id属性移动到BaseEntity以使其工作,然后强制执行EF以创建TPC方案,而不是默认的TPH。如果你愿意,我可以更新答案,但我仍然不确定它是否能正常工作。而且我认为它看起来很复杂。如果你是对的,我们最好还是这样。我将放弃我的“仅注释”要求。我不想因为这个让我的模型变得更复杂。fluentapi做得很好。