Entity framework 在同一个表中存在多个一对多关系。该属性不是相关类型上的有效导航属性
我很难描绘这种关系Entity framework 在同一个表中存在多个一对多关系。该属性不是相关类型上的有效导航属性,entity-framework,ef-code-first,entity-framework-core,Entity Framework,Ef Code First,Entity Framework Core,我很难描绘这种关系 public class Person { public long Id { get; set; } [InverseProperty("Friend")] public virtual ICollection<Friendship> Friends { get; set; } } public class Friendship { public long Id { get; set; } public long
public class Person
{
public long Id { get; set; }
[InverseProperty("Friend")]
public virtual ICollection<Friendship> Friends { get; set; }
}
public class Friendship
{
public long Id { get; set; }
public long PersonId { get; set; }
[ForeignKey(nameof(PersonId))]
public virtual Person Person { get; set; }
public long FriendPersonId{ get; set; }
[ForeignKey(nameof(FriendPersonId))]
public virtual Person Friend { get; set; }
}
公共类人物
{
公共长Id{get;set;}
[反向财产(“朋友”)]
公共虚拟ICollection好友{get;set;}
}
公众阶级友谊
{
公共长Id{get;set;}
公共长人形ID{get;set;}
[外键(姓名(人名))]
公共虚拟人{get;set;}
公共长FriendPersonId{get;set;}
[ForeignKey(姓名(FriendPersonId))]
公共虚拟人好友{get;set;}
}
我得到以下错误
类型“Person”的属性“Friends”上的InversePropertyAttribute无效。属性“Friends”不是相关类型“Friends”的有效导航属性。确保该属性存在并且是有效的引用或集合导航属性。
我可以清楚地看到Friends类确实包含一个名为Friend的属性,但我不确定是什么使它成为无效的导航属性
如果我将我的
InverseProperty
属性更改为FriendPersonId
,它将抛出一个空引用异常 反向属性设置不正确
应该是[InverseProperty(“Person”)])
信用:伊万·斯托夫指出了我的错误。我检查了一下,它对我起了作用。我使用EF6.1.3测试他的isse是否与EF7相关?您使用了什么代码进行测试?我正在做这样的事情<代码>人员p=新人员();p、 添加(新友谊(){FriendPersonId=4});上下文。人物。添加(p);SaveChanges(),其中4是数据库中已经存在的人的id如果
Friends
集合表示人的朋友,则应将其绑定到Friends.person
属性(即[反向属性(“person”)]
)。然后,您应该能够使用注释中的代码。上述模型是有效的,并且可以正确地与EF core一起工作。您使用的是什么版本的EF?什么代码会为你抛出异常?@IvanStoev你是对的,我有错误的InverseProperty。不过我不能把你的评论当作答案。我在修改属性以使代码正常工作时遇到异常。