System.InvalidOperationException:“无法确定导航属性表示的关系”

System.InvalidOperationException : 'Unable to determine the relationship represented by navigation property'

提问人:Vijayalakshmi.N 提问时间:10/30/2023 最后编辑:Vijayalakshmi.N 更新时间:10/30/2023 访问量:46

问:

我的应用程序基本上使用 .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] 属性,但异常仍然存在。

我需要指导来解决此异常,以便成功完成迁移。

C# MySQL .NET

评论

0赞 Amit Mohanty 10/30/2023
我认为您需要在类的方法中显式配置 and 实体之间的关系。CompanyFrontPageOnModelCreatingDbContext

答:

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);