提问人:Vijayalakshmi.N 提问时间:10/30/2023 最后编辑:Vijayalakshmi.N 更新时间:10/30/2023 访问量:46
System.InvalidOperationException:“无法确定导航属性表示的关系”
System.InvalidOperationException : 'Unable to determine the relationship represented by navigation property'
问:
我的应用程序基本上使用 .net Core 3.1(代码优先方法)。
将我的应用程序从 .net 5 迁移到 6 时。
我们正在使用 Entity Framework Core,并遇到以下异常:
System.InvalidOperationException:“无法确定类型为”Company“的导航属性”FrontPage.PartyANavigation“所表示的关系。 手动配置关系,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略此属性。
这就是公司实体和首页实体之间关系的管理方式。
public partial class Company : BaseEntity
{
// other properties
public virtual ICollection<FrontPage> FrontPagePartyANavigation { get; } = new HashSet<FrontPage>();
public virtual ICollection<FrontPage> FrontPagePartyBNavigation { get; } = new HashSet<FrontPage>();
public virtual ICollection<FrontPage> FrontPageToSolicitorNavigation { get; } = new HashSet<FrontPage>();
}
public partial class FrontPage : BaseEntity
{
// other properties
public virtual Company? PartyANavigation { get; set; }
public virtual Company? PartyBNavigation { get; set; }
public virtual Company? ToSolicitorNavigation { get; set; }
}
}
设置数据库时,baseRepository 会发生此异常。
我知道异常消息建议手动配置关系,但我不确定该怎么做。 有人可以指导我如何解决此问题并使用 Entity Framework Core 正确配置关系吗?
我们愿意将应用程序从 .NET 5 迁移到 .NET 6。我面临上述例外。
我尝试了 [Not Mapped] 属性,但异常仍然存在。
我需要指导来解决此异常,以便成功完成迁移。
答:
0赞
Tim Maes
10/30/2023
#1
我认为您应该使用 FluentAPI 来配置关系。下面的小例子,但你也必须配置外键(你的例子中没有提供)
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Entity<FrontPage>()
.HasOne(fp => fp.PartyANavigation)
.WithMany(c => c.FrontPagePartyANavigation);
modelBuilder.Entity<FrontPage>()
.HasOne(fp => fp.PartyBNavigation)
.WithMany(c => c.FrontPagePartyBNavigation);
modelBuilder.Entity<FrontPage>()
.HasOne(fp => fp.ToSolicitorNavigation)
.WithMany(c => c.FrontPageToSolicitorNavigation);
base.OnModelCreating(modelBuilder);
评论
Company
FrontPage
OnModelCreating
DbContext