簡體   English   中英

實體框架核心中的代理項

[英]Proxy Items in Entity Framwork Core

是否可以在 EF Core 中創建為代理元素?

例如,在數據庫中有 id 為 1 的元素,其名稱為Example id 為 2 的第二個元素沒有名稱(為空),但有對元素 1 的引用(“id_replace”)。 在這種情況下,我希望第 2 項返回的名稱與第 1 項一樣是“示例”。還有對第 1 項引用的“包括”引用。

我之所以有這樣一個奇怪的想法,是因為我需要鏈接元素,如果元素 1 發生變化,所做的變化也會顯示在元素 2 上。

數據庫中的示例寄存器

你當然可以。 假設你的 class 是:

public class YourClass
{
    public int id { get; set; }
    public string name { get; set; }
    public int? id_replace { get; set; }
}

在您的 class 中,您需要具有一對多引用屬性:

    public YourClass parent { get; set; }
    public IList<YourClass> children { get; set; }

然后,在您的 DbContext class 中,在覆蓋 OnModelCreating function 中,您需要在流利的 API 中設置一個關系,指示 id_replace 是一個自引用外鍵:

modelBuilder.Entity<YourClass>(entity =>
{
     entity.HasOne(x => x.parent)
         .WithMany(x => x.children)
         .HasForeignKey(x => x.id_replace)
         .OnDelete(DeleteBehavior.SetNull);
});

這樣做(並遷移)之后,您將擁有必要的導航屬性,以便能夠添加不代表數據庫中任何內容的計算屬性。 所以你的 class 可以有屬性:

    public int alt_name => name??$"\"{parent.name}\"";

所以最終,您的 class 將如下所示:

public class YourClass
{
    public int id { get; set; }
    public string name { get; set; }
    public int? id_replace { get; set; }
    public YourClass parent { get; set; }
    public IList<YourClass> children { get; set; }
    public int alt_name => name??$"\"{parent.name}\"";
}

這樣,您就可以放棄name屬性,而只調用alt_name屬性。 您甚至可以將name屬性設置為私有或更改名稱以避免混淆。

暫無
暫無

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

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