你可以試試這樣說:
public class User
{
public int Id { get; set; }
public ICollection<FriendRequest> FriendRequests { get; set; }
}
public class FriendRequest
{
public int UserId { get; set; }
public int FriendId { get; set; }
public DateTime RequestDate { get; set; }
public User User { get; set; }
public User Friend { get; set; }
}
映射用流利的API:
modelBuilder.Entity<User>()
.HasMany(u => u.FriendRequests)
.WithRequired(f => f.User)
.HasForeignKey(f => f.UserId);
modelBuilder.Entity<FriendRequest>()
.HasKey(f => new { f.UserId, f.FriendId });
modelBuilder.Entity<FriendRequest>()
.HasRequired(f => f.Friend)
.WithMany()
.HasForeignKey(f => f.FriendId);
因爲在鏈路表中RequestDate
屬性不能映射這是一個許多一對多關係。相反,您需要兩個如上所示的一對多關係。
可能你需要禁用級聯刪除,我不確定。您可以通過在兩個一對多映射的末尾附加.WillCascadeOnDelete(false)
來完成此操作。
編輯
您的意見:如果刪除RequestDate
列您可以創建一個多一對多的關係模型。你不需要在這種情況下FriendRequest
實體:
public class User
{
public int Id { get; set; }
public ICollection<User> FriendRequests { get; set; }
}
映射用流利的API:
modelBuilder.Entity<User>()
.HasMany(u => u.FriendRequests)
.WithMany()
.Map(m =>
{
m.ToTable("FriendRequests");
m.MapLeftKey("UserId");
m.MapRightKey("FriendId");
});
的RequestDate屬性不是必需的。如果我刪除該列,是否有辦法將其作爲多對多來執行? – reach4thelasers 2012-03-27 15:35:28
@ reach4thelasers:是的,看我的編輯。 – Slauma 2012-03-27 15:42:23
感謝您的迴應。我嘗試了你的代碼,並將一些示例數據放入連接表中來測試它,但我總是爲user.FriendRequests.Count()獲取0。我需要做些什麼才能獲取Joined集合? – reach4thelasers 2012-03-27 16:05:32