簡體   English   中英

如何在 EFCore 中覆蓋實體保存?

[英]How to override entity saving, in EFCore?

我想在我的模型中存儲一個對象列表,但我知道 EFCore 不支持。 為了解決這個問題,我在模型上創建了一個私有字符串屬性來保存列表中對象的 ID。 我的目的是在恢復時在類的構造函數中填充列表。 我的課如下:

public class Visitor
{
    public int ID { get; set; }

    private string _DepartmentIds { get; set; }

    public List<Department> Departments { get; set; }

    public Visitor()
    {
        if (_DepartmentIds.Length > 0)
        {
            Departments = JsonConvert.DeserializeObject<List<Department>>(_DepartmentIds);
        }
        else
        {
            Departments = new List<Department>();
        }
    }
}

我有兩個問題。 一是 _DepartmentIds 不會被 EFCore 保存/跟蹤。 我想是因為它是私人的。 第二個是我需要創建一個方法,該方法將從部門列表中讀取 ID,將它們放入 _DepartmentIds 字符串中,但我不知道如何在保存對象時調用此方法。 是否可以覆蓋或擴展保存在 EFCore 中的實體模型?

編輯:我正在使用反序列化,而不僅僅是將 ID 與分隔符連接,因為我可能想稍后擴展它。

對於 One:Many 關系,您應該創建一個單獨的表並加入它們。 架構應該是這樣的:

public class Visitor {
    public int ID { get; set; }
    public List<Department> Departments { get; set; }
}

public class Department {
    public int ID { get; set; }
    public int VisitorID { get; set; }

    [ForeignKey(nameof(VisitorID))]
    public Visitor Visitor { get; set; }
}

如果您不想在Department擁有Visitor對象,您還可以使用以下內容通過 fluent API 配置它:

entity.HasOne<Visitor>()
    .WithMany()
    .HasForeignKey(department => department.VisitorID);

當您在Visitor上執行查找時,您將能夠使用Include功能來包括所有相關部門。

暫無
暫無

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

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