[英]Is it acceptable to bind Entity Framework entities to Window Forms controls?
我有兩個實體:第一個是 SalesOrder,第二個是 SalesOrderDetails。 在 SalesOrder 實體中,我有一個跟蹤 SalesOrderDetails 的 ObservableListSource 列表類型。 實體看起來像這樣:
public class SalesOrder{
public int Id {get; set;}
public DateTime Date {get; set;}
...
public virtual ObservableListSource<SalesOrderDetails> OrderDetails { get; set; }
publi SalesOrder()
{
OrderDetails = new ObservableListSource<SalesOrderDetails>()
}
}
public class SalesOrderDetails{
public int Id { get; set; }
public int Quantity { get; get; }
public decimal Price { get; set; }
...
}
ObservableListSource 擴展了 ObservableCollection 並實現了 IListSource。 GetList 方法返回一個與 ObservableCollection 保持同步的 bindingList。 GetList 方法是在 System.Data.Entity 程序集中定義的擴展方法。 ObservableListSource 看起來像這樣:
public class ObservableListSource<T> : ObservableCollection<T>, IListSource
where T : class
{
private IBindingList _bindingList;
bool IListSource.ContainsListCollection { get { return false; } }
IList IListSource.GetList()
{
return _bindingList ?? (_bindingList = this.ToBindingList());
}
}
為了將 SalesOrder 和 SalesOrderDetails 實體綁定到我的表單,我使用了兩個綁定源控件:salesOrderBindingSource 和 salesOrderDetailsBindingSource。 綁定看起來像這樣:
salesOrderBindingSource.DataSource = SalesOrder;
salesOrderDetailsBindingSource.DataSource = salesOrderBindingSource;
salesOrderDetailsBindingSource.DataMember = OrderDetails;
我綁定每個需要更改跟蹤的實體,就像我綁定 SalesOrder 和 SalesOrderDetails 一樣。 我一直在讀到不建議將實體綁定到 UI,我應該使用視圖模型並將它們綁定到 UI。 但這意味着我必須編寫更改跟蹤代碼或找到一個進行更改跟蹤的庫。
你怎么認為?
如果您的應用程序可以接受綁定到 DataSet 和 DataTable,那么綁定到 EF 模型也是可以的。
一般來說,這取決於您的應用程序的要求; 例如,通常對於小型或以數據為中心的 forms 應用程序,綁定到數據表或實體模型是有意義的,但通常在大型應用程序中,您可能需要考慮更好的關注點分離模式。
如果到 EF 模型的數據綁定對您的應用程序有意義,那么要以正確的方式執行此操作,請遵循此 Microsoft Docs 文章:
關於 IBindingList、IListSource 的一些注意事項
IBindingList
,但它可以從其GetList方法返回一個可綁定列表。 它在Windows Forms中得到了很好的支持和使用。例如DataGridView,ComboBox,ListBox,BindingSource檢查數據源是否實現IListSource
,在這種情況下,它們通過調用GetList
方法獲取數據源。 這就是為什么 DataTable 在不實現IBindingList
的情況下支持數據綁定,而是在 GetList 中返回一個實現了IBindingList
的DataView
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.