2016-09-22 161 views
0

我有兩個實體的用戶,並通知如下重複的一個一對多的關係,實體框架

public class Notification 
{ 
    public virtual int? FromUserId { get; set; } 
    public virtual int? ToUserId { get; set; } 
    public virtual SystemUser FromUser { get; set; } 
    public virtual SystemUser ToUser { get; set; } 
} 

public class SystemUser 
{ 
    public virtual ICollection<Notification> SentNotifications { get; set; } 
    public virtual ICollection<Notification> RecievedNotifications { get; set; } 
} 

如何讓實體框架加載在SentNotifications列表,它是FromUser通知是在當前用戶和負載的通知ReceivedNotificationsToUser的列表是當前用戶?

回答

1

一種方法是使用InverseProperty數據註釋。您可以將註釋放在關係的任一端(如果需要,也可以兩端)。

public class Notification 
{ 
    public int? FromUserId { get; set; } 
    public int? ToUserId { get; set; } 
    [InverseProperty("SentNotifications")] 
    public virtual SystemUser FromUser { get; set; } 
    [InverseProperty("RecievedNotifications")] 
    public virtual SystemUser ToUser { get; set; } 
} 

第二種方法是使用Fluent Api來明確配置您的關係。你可以,例如,覆蓋您的上下文的OnModelCreating方法並添加以下代碼:

modelBuilder.Entity<Notification>() 
    .HasOptional(l => l.FromUser) 
    .WithMany(p => p.SentNotifications) 
    .HasForeignKey(l=>l.FromUserId); 

modelBuilder.Entity<Notification>() 
    .HasOptional(l => l.ToUser) 
    .WithMany(p => p.RecievedNotifications) 
    .HasForeignKey(l=>l.ToUserId);; 
+0

謝謝您的回答@octavioccl,我會測試它 –