【发布时间】:2021-04-22 23:45:40
【问题描述】:
我有两个实体:
审计类:
public class Audit
{
public string AuditId{get;set;}
public int EmployeeId{get;set;}
public virtual ModEmployee{get;set;}
}
员工类:
public class Employee
{
public int EmployeeId{get;set}
}
在加载 Set<Audit> 时,我希望填充 Audit 类的 Employee 属性。
这显然是一对多关系的情况,其中一个审计将有一个员工,但一个员工可以在多个审计中。
我的 Fluent API 如下所示:
protected override OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Audit>()
.HasOne(a=>a.ModEmployee)
.WithMany()
.HasForeignKey("EmployeeId");//a=>a.EmployeeId wont work.
}
一段时间以来,我一直在寻找解决方案,并从this answer 获取了一些信息,但它是针对一对一的。然后this resource 显示了一种方法,但这需要我在 Employee 类中有一个 Audits 集合。
我无法更改现有模型或添加注释,因为它们已被其他实体框架版本(非核心)使用。
目前我收到以下错误:
System.InvalidOperationException: '无法确定 由导航属性“Employee.ModEmployee”表示的关系 输入“员工”。要么手动配置关系,要么忽略 此属性使用“[NotMapped]”属性或使用 'OnModelCreating'中的'EntityTypeBuilder.Ignore'。'
如果我在 Audit 的构建器上添加忽略方法,错误就会消失,如下所示:.Ignore(a=>a.ModEmployee) 但我不会在 Audit 中获取实体对象。任何帮助将不胜感激。我在 EFCore 3.1.10 上。谢谢阅读。
任何帮助将不胜感激。
【问题讨论】:
-
错误消息中显示的是“Employee.ModEmployee”而不是“Audit.ModEmployee”,这很尴尬。您是否尝试删除 .HasForeignKey("EmployeeId")?
-
@heringer 我没有,我认为它只会加载 EmployeeId 而不会对 ModEmplyee 做任何事情。但我看你有一点,会试一试。感谢您的评论!
-
我测试了您的示例,它在 EF Core 3.1.10 和 EF Core 5 中的工作方式与您的
OnModelCreating配置一样。问题一定出在其他地方。 -
仅供参考,下一个设置
modelBuilder.Entity<Audit>().HasOne(a => a.ModEmployee).WithMany().HasForeignKey(a => a.EmployeeId);对我来说很好。
标签: c# .net entity-framework asp.net-core-3.1 ef-core-3.1