2013-01-06 130 views
3

我有一個Windows窗體應用程序中包含的形式:實體框架+ Windows窗體:壽命和數據綁定

  • 的MainForm
  • FirstForm
  • SecondForm
  • ...

主表單從頭開始,在應用程序存在後結束。當我使用每個表單的一個上下文時,主表單的生命週期是不是很長?第二個問題是每個表單有一個上下文,我總是需要使用分離的實體。

編輯: 我總是需要重新附加實體,如:

_context.MyEntities.Attach(existingEntity1); 
_context.MyEntities2.Attach(existingEntity2); 

existingEntity1.MyEntities2.Add(existingEntity2); 

_context.SaveChanges(); 

那看到一個有點奇怪我。

什麼是終身搬運的最佳實踐以及如何解決該問題脫離當我使用每個表單一個方面?

現在我的數據綁定的樣子:

var myEntities = from e in _context.MyEntities 
       select e; 

var bindingList = new BindingList<MyEntity>(myEntities.ToList()); 
myGridView.DataSource = bindingList; 

說出的MainForm,FirstForm和SecondForm需要同樣的BindingList但做不同的事情,什麼最好的做法共享綁定列表?

+1

你可以詳細說明你的問題是分離的實體是什麼? –

+0

@QuintonBernhardt我編輯了我的問題。 – passwortsicherheit

+0

你對每個表單中的實體做什麼? – 2013-01-06 22:29:49

回答

1

recommendation是每種形式的上下文。但是,如果以多種形式使用相同的上下文對您有好處 - 如果在同一個實體上工作,開發速度更快,性能更好 - 並且風險超過風險長期存在的上下文 - 被加載的實體太多併發問題 - 然後在多個表單中使用上下文。也許您的父母表單中有另一個事件可以用來觸發對上下文的處理和重新創建,以便在它成爲問題時減少它的一生?

另一種方法是評估你是否表格可以改變,以代表工作更加獨立的單位,你可能不會有那麼多共同的實體,從而減少分離的實體進行操作。

+0

我將爲多個表單使用相同的上下文。 – passwortsicherheit

0

編輯:正如在評論中指出,這個答案是不是微軟目前的建議。它適用於複雜的對象模型和模型與上下文分離的情況。

對於你的第一個問題,我會說上下文過長。短壽命通常更好。

關於第二個問題,我會去了解一下自跟蹤實體,如果你經常處理分離的實體。

關於第三個問題,它取決於你的數據做什麼。如果是隻讀使用,那麼可以將相同的數據綁定到同一個實例,而沒有太多問題。如果是用於更新,那麼它取決於業務領域。在某些情況下,您可能會考慮「克隆」數據以保持數據分離。但是,也可能每個表單都看到相同的單個實例,以便所有表單都顯示相同版本的數據。一種形式的變化出現在其他形式上。無論哪種情況,自我跟蹤實體都可以正常工作。

我有表示use of Self Tracking Entities in a WPF app的樣品。

+0

你將如何處理長期存在的環境?表單從頭開始,在具有上下文的應用程序存在之後結束。 – passwortsicherheit

+0

一般EF指導說在訪問數據庫之前創建上下文,然後在調用之後立即釋放它。然後在您下次打開數據庫並在完成時釋放時創建一個新的上下文。 – NathanAW

+1

雖然,請注意[MS](http://msdn.microsoft.com/en-us/data/jj613924.aspx)不再推薦STE。 – 2013-01-06 22:28:56