【发布时间】:2022-01-22 04:09:49
【问题描述】:
当我尝试仅在关系的一端使用 CLR 导航属性映射多对多关系时,我遇到了 EF Core 5.0 的问题。
例如,一个问题可以有多个答案,而一个答案可以应用于多个问题(重复)。为简单起见,我不想从重复问题的答案返回。
public class Question
{
public int Id { get; set; }
public virtual IEnumerable<Answer> Answers { get; set; } = new List<Answer>();
public string Text { get; set; } = "";
}
public class Answer
{
public int Id { get; set; }
public string Text { get; set; } = "";
}
public class SomeDbContext : DbContext
{
public DbSet<Question> Questions => Set<Question>();
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Question>().HasMany(q => q.Answers).WithMany("Duplicates");
}
}
这工作正常,直到我启用更改跟踪代理或延迟加载代理。然后我开始收到说我需要添加反向导航属性的异常。
System.InvalidOperationException:实体类型“Answer”上的属性“重复”在没有 CLR 属性的情况下进行映射。 “UseChangeTrackingProxies”要求所有实体类型都是公共的、未密封的、具有虚拟属性并具有公共或受保护的构造函数。 'UseLazyLoadingProxies' 只要求导航属性是虚拟的。
我知道代理需要virtual 导航属性才能添加所需的行为,但是有没有办法使用影子属性来做到这一点?
【问题讨论】: