2017-02-28 42 views
2

我無法映射此關係。同一個表中存在多個一對多關係。該屬性不是相關類型的有效導航屬性

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

我收到以下錯誤

The InversePropertyAttribute on property 'Friends' on type 'Person' is not valid. The property 'Friends' is not a valid navigation property on the related type 'Friendship'. Ensure that the property exists and is a valid reference or collection navigation property.

我可以清楚地看到,友誼類不包含的屬性稱爲朋友,但我不知道是什麼讓這一個無效的導航屬性。

如果我將InverseProperty屬性更改爲FriendPersonId,它將引發空引用異常。

+0

我檢查了它,它爲我工作。我正在使用EF 6.1.3來測試他的isse是否與EF7有關? –

+0

你用什麼代碼來測試?我正在做這樣的事情。 'Person p = new Person(); p.Friends.Add(new Friendship(){FriendPersonId = 4}); context.People.Add(P); context.SaveChanges();',其中4是DB中已存在的人員的ID – Dave

+1

如果Friends集合代表Person的朋友,那麼您應該將它與「Friendship.Person」屬性(即'[InverseProperty(「Person」)]')。那麼你應該可以使用評論中的代碼。 –

回答

1

反轉屬性設置不正確。

本來應該[InverseProperty("Person")])

信用:伊萬Stoev指出我的錯誤。

相關問題