[英]EF model-binding with winforms and asp.net
我在一個應該有Web界面以及Winforms界面的項目中。 它可能將從WinForms開始,將來我們將添加ASP.NET MVC Web界面。
我有使用ASP.NET MVC和EF6的經驗,但是在閱讀了如何將EF POCO實體綁定到https://msdn.microsoft.com/zh-cn/data/jj682076.aspx中的 winforms控件后,我意識到它需要修改實體定義(代碼優先),以公開Winforms實現的詳細信息。
有什么辦法可以從模型層隱藏winforms的依賴關系嗎?
我建議在所示的場景中,幾個不同的前端項目使用存儲庫代碼,應該有一個公共的中間層,可以從UI提取數據庫。
將您的winforms控件綁定到中間層對象。 它應該完全不了解數據層。
從定義的角度考慮,並考慮到您已經在使用MVC
和MVVM
,應該記住POCO
並非旨在綁定到視圖(完全是任何視圖)。 這里周圍有幾個職位,甚至問題在計算器上,就像兩個: 一是 | 第二 | (以及許多其他)。
考慮到該聲明,您應該設計一個ViewModel
,將您的POCO
映射到屏幕上的有用項目( HTML
, Winforms
,本機移動設備或任何其他項目),並避免使用數據注釋(將它們保持在最小數量)。
您可能需要兩個ViewModel
庫,一個用於MVC
,另一個用於Winforms
,每個都有它自己的配置和全部,但是由於它更多地涉及數據傳輸而不是業務邏輯,所以這很好。
要將ViewModels
以更好的方式(又稱為自動)連接到POCO
,反之亦然,請仔細研究映射庫,例如AutoMapper
或其他。 我喜歡AutoMapper
因為有了它,我可以在不同的程序集中使用代碼優先的方法構建映射定義,從而使所有內容真正保持干凈並避免數據注釋(我討厭)。
在通常情況下,獲得通用實體模型不是問題。 實際上,為了使導航屬性在WinForms中具有可綁定性,MS建議實現自動提供IBindingList集合的IListSource接口。 但是,可以將ObservableCollection類型用於適合Web應用程序的導航屬性,並在WinForms應用程序中使用IBindingList(如果使用的是MVVM模式,最好在視圖模型中執行這種轉換)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.