[英]Non-static foreign key EF core
我正在開發一個信使 API,它會像不和諧一樣有人向另一個用戶發送好友請求,如果用戶接受,他們就會開始消息傳遞。 如您所知,每個FriendRequest
有兩個聯系人,發送者和接收者,有兩種方法可以實現這種關系,一種方法是在FriendRequest
和聯系人之間定義多對多關系,並將FriendRequest
的聯系人限制為兩個。 另一種方法是在FriendRequest
中定義兩個屬性, SenderContact
和ReceiverContact
。
我選擇了第二種方式,每個FriendRequest
應該有兩個外鍵和兩個聯系人。 但是 EF 自動添加了另一個外鍵。 我只想知道兩件事
1:我選擇的第二種方式是好方式嗎? 有沒有更好的方法來實現這種情況?
2:我可以阻止 EF 創建ContactId
列嗎?
MyConext 中的 OnModelCreating:
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Contact>().HasMany<FriendRequest>().WithOne(f => f.FromContact);
builder.Entity<Contact>().HasMany<FriendRequest>().WithOne(f => f.ToContact);
base.OnModelCreating(builder);
}
好友請求:
public class FriendRequest
{
public int Id { get; set; }
public Contact FromContact { get; set; }
public Contact ToContact { get; set; }
public string Text { get; set; }
}
接觸:
public class Contact
{
[Key]
public int Id { get; set; }
public int UserId { get; set; }
public string Username { get; set; }
public ICollection<Chat> Chats { get; set; }
public ICollection<FriendRequest> FriendRequests { get; set; }
public ICollection<Contact> Friends { get; set; }
}
你的方法對我來說似乎沒問題,但你有一個配置錯誤。 您的聯系對象應該是
public class Contact
{
[Key]
public int Id { get; set; }
public int UserId { get; set; }
public string Username { get; set; }
public ICollection<Chat> Chats { get; set; }
public ICollection<FriendRequest> SentFriendRequests { get; set; }
public ICollection<FriendRequest> ReceivedFriendRequests { get; set; }
public ICollection<Contact> Friends { get; set; }
}
FriendRequest 可以保持不變,但建議定義一個外鍵
public class FriendRequest
{
public int Id { get; set; }
public Contact FromContact { get; set; }
public Contact ToContact { get; set; }
public string Text { get; set; }
}
和配置
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Contact>()
.HasMany<FriendRequest>(c => c.SentFriendRequests)
.WithOne(f => f.FromContact);
builder.Entity<Contact>()
.HasMany<FriendRequest>(c => c.ReceivedFriendRequests)
.WithOne(f => f.ToContact);
base.OnModelCreating(builder);
}
在配置關系時,我總是會再次查看MS 文檔,我建議您這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.