簡體   English   中英

EF Core 3.0.0 - 兩個相同類型的一對一關系

[英]EF Core 3.0.0 - Two one-to-one relations of same type

我正在嘗試創建兩個從一種類型到另一種類型的一對一關系。

背景:我有一個發送請求的客戶端。 在一個新的用戶故事中,我需要向客戶端添加提醒請求。

問題:在我添加或更新請求后,它們會覆蓋其中一個請求的外鍵屬性(通常,Reminder 的 id 將放置在 RequestId 和 ReminderId 兩個字段中)。

數據庫 model:

public class Client
{
    [Key]
    public int Id { get; set; }

    public int? RequestId { get; set; }

    [ForeignKey(nameof(RequestId))]
    public Request Request { get; set; }

    public int? ReminderId { get; set; }

    [ForeignKey(nameof(ReminderId))]
    public Request Reminder { get; set; }
}

public class Request
{
    [Key]
    public int Id { get; set; }

    [InverseProperty(nameof(Client.Request))]
    public Client RequestClient { get; set; }

    [InverseProperty(nameof(Client.Reminder))]
    public Client ReminderClient { get; set; }
}

一些測試 model 的代碼:

class Program
{
    static void Main(string[] args)
    {
        using (var context = new Context())
        {
            var client = new Client();

            client = context.Clients.Add(client).Entity;
            context.SaveChanges();

            var request = new Request();
            request.RequestClient = client;

            context.Requests.Add(request);
            context.SaveChanges();

            var reminder = new Request();
            request.ReminderClient = client;

            context.Requests.Add(reminder);
            context.SaveChanges();
        }

        using (var context = new Context())
        {
            var t = context.Clients.ToList();
            var t2 = context.Requests.ToList();
        }
    }
}

數據庫結果:

在此處輸入圖像描述

那么有沒有人知道為什么它會這樣以及如何讓它正常工作?

這看起來像一個錯誤,它在 EF Core 5.0.5 上重現。 要解決此問題,請像這樣簡化您的代碼:

var client = new Client();

client.Request = new Request();
client.Reminder = new Request();
context.Clients.Add(client);
context.SaveChanges();

IE 使用客戶端的導航屬性而不是請求的屬性來關聯實體。

請在此處打開一個問題: https://github.com/dotnet/efcore/issues

嘗試添加這些屬性:

public class Client
{
  .....

    [ForeignKey(nameof(RequestId))]
   [InverseProperty("RequestClient")]
    public virtual Request Request { get; set; }

  
    [ForeignKey(nameof(ReminderId))]
     [InverseProperty("ReminderClient")]
    public virtual Request Reminder { get; set; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM