2012-06-30 10 views
5

Kullanıcıların birbirlerini izlemelerine izin veren özelliği uygularım. Ben veritabanı tablolar vardır:Varlık çerçeve sınıfı sayısında iki aynı sınıf türü

public class Follow 
    { 
     [Key, Column(Order = 1)] 
     public Guid FollowerUserId { get; set; } 
     [Key, Column(Order = 2)] 
     public Guid FollowUserId { get; set; }   
     public DateTime CreatedOnDate { get; set; } 

     public virtual User Follower { get; set; } 
     public virtual User Following { get; set; } 
    } 

son iki sanal özellikler danışmanın sorunu:

User{UserId, FirstName, LastName etc.} 
Followings{FollowerUserId, FollowingUserId, CreatedOnDate etc.} 

Yani EF sınıfı ekledi. Ben aradığında:

var model = con.Follows.Where(x => x.FollowerUserId == uid); 

ben istisna aşağıdaki olsun:

Invalid column name 'Following_UserId'. 

konu

muhtemelen bir sınıfta nedeniyle iki Kullanıcı nesneleri neden olmaktadır. Bunu nasıl çözeceğimize dair bir fikrin var mı?
GÜNCELLEME

public class User 
    { 

     public Guid UserId { get; set; } 
     ... 
     public virtual ICollection<Follow> Following { get; set; } 
     public virtual ICollection<Follow> Followers { get; set; } 
    } 
+0

doğru görünmüyor: navigasyon özellikleri birbirine ait EF anlatmak için [InverseProperty] öznitelik eklemek gerekir userID ve navigation özelliği, bunlardan sadece birini koymanız gerekir, aksi takdirde EF aralarındaki bağlantıyı kuramaz – Clueless

+0

Daha iyi açıklayabilir miyim Bunu nasıl düzeltebileceğimi bilmiyorum? – 1110

cevap

4

Ben sebebi EF tanıyamadı böylece yabancı anahtar özellikleri (FollowerUserId ve FollowUserId) ve navigasyon özellikleri (Follower ve Following) adlandırma kurallarına saygı kalmamasıdır düşünüyorum yabancı anahtarlar olarak ilk özellikler. Açıkça [ForeignKey] özelliğini kullanan FK özelliklerini belirleyerek sorunu çözebilirsiniz:

public class Follow 
{ 
    [Key, Column(Order = 1), ForeignKey("Follower")] 
    public Guid FollowerUserId { get; set; } 
    [Key, Column(Order = 2), ForeignKey("Following")] 
    public Guid FollowUserId { get; set; }   

    public DateTime CreatedOnDate { get; set; } 

    public virtual User Follower { get; set; } 
    public virtual User Following { get; set; } 
} 

Edit

adlandırma kuralı saygı duymayan bir azından ikinci özellik, ilki Tamam görünüyor. Yani, alternatif içine ikinci FK özelliğini FollowUserId yeniden adlandırma sorunu çözebilirsiniz:

public Guid FollowingUserId { get; set; }   

... navigasyon özelliği Following denir çünkü. UPDATE Hakkında

Düzenleme 2

: me hem koymak için

public class Follow 
{ 
    [Key, Column(Order = 1), ForeignKey("Follower")] 
    public Guid FollowerUserId { get; set; } 
    [Key, Column(Order = 2), ForeignKey("Following")] 
    public Guid FollowUserId { get; set; }   

    public DateTime CreatedOnDate { get; set; } 

    [InverseProperty("Followers")] // refers to Followers in class User 
    public virtual User Follower { get; set; } 
    [InverseProperty("Following")] // refers to Following in class User 
    public virtual User Following { get; set; } 
} 
+0

Teşekkürler Bu sorunu takip sınıfında çözüyor. Bir sorun değilse, bir sorun değil, aynı zamanda kullanıcı sınıfına (soru güncellememde ekledim) takipçileri/takipçileri toplamayı da denedim ve yine benzer bir hata alıyorum: 'User_UserId' geçersiz sütun adı. – 1110

+0

@ 1110: Düzenle 2'ye bakın. – Slauma

İlgili konular