簡體   English   中英

更新和編輯多對多表Entity Framework

[英]Update and edit many to many tables Entity Framework

我有四個表(Locations,Events,MainTags,EventTags), Events表與其他三個表中的每個表之間是多對多關系。

現在,我想在同一頁面上編輯和顯示這些表中的數據,但是我不確定哪種方法是正確的。

現在,我這樣做是從“ Events表中的每個單獨條目中獲取ID,然后在每個其他表中搜索相同的ID,然后將這些結果保存在列表中,然后將其顯示在頁面上。 adc是我與數據庫的連接)

List<Event> allEvents = adc.Events.ToList();
List<Location> testTHis = new List<Location>();

foreach (Event eve1 in allEvents)
{
   var query_test = from a in adc.Locations where a.Id ==  eve1.id select a;
   testTHis = query_test.ToList();
}

但這似乎是一項繁重的工作,而且看起來不太好,所以我想知道是否有更好的方法可以做到這一點,尤其是在數據庫中包含大量數據的情況下,這看起來似乎不可行。好主意,因為它需要很多時間才能完成。 任何人都可以幫助我找出更好的解決方案嗎?

您的Event實體應公開3個導航屬性:

public virtual ICollection<Location> Locations { get; set; }
public virtual ICollection<MainTag> MainTags { get; set; }
public virtual ICollection<EventTag> EventTags { get; set; }

然后,當您查詢事件時,您告訴EF包括所有標簽/事件標簽和位置。

context.Events
       .Include(x => x.Locations)
       .Include(x => x.MainTags)
       .Include(x => x.EventTags)
       .ToList()

這將在一個查詢中一起檢索事件及其位置,MainTag和EventTag。

帶有警告的警告是,即使多次引用,每個事件也將具有其自己的標記/位置。

例如,假設您有2個活動,

  1. CodePerfDotNetEvent {Tag = {ID = 1,Name =“ Blog”}}
  2. MichalCiechanEvent {Tag = {ID = 1,Name =“ Blog”}}

當使用include時,即使它們在數據庫中表示相同的值,也將獲得2個不同的Tag對象。

否則,您將LazyLoading和ProxyGeneration保持打開狀態,並讓EF每次訪問Locations / EventTags / MainTags虛擬屬性之一時對數據庫進行多次調用。

暫無
暫無

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

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