C# 对于EF 6导航属性,是否建议使用实现IListSource的ObservableCollection?
我刚刚开始使用Entity Framework,我正在针对.Net 4.5.2的Windows窗体应用程序中使用EF 6.1.3(没有特别的原因说明它不能是更高版本的.Net) 我想将数据绑定到Windows窗体C# 对于EF 6导航属性,是否建议使用实现IListSource的ObservableCollection?,c#,winforms,entity-framework,datagridview,C#,Winforms,Entity Framework,Datagridview,我刚刚开始使用Entity Framework,我正在针对.Net 4.5.2的Windows窗体应用程序中使用EF 6.1.3(没有特别的原因说明它不能是更高版本的.Net) 我想将数据绑定到Windows窗体DataGridView,我在MSDN上找到了此演练。该页面上一次更新是在2016年10月,但似乎较旧(这意味着Visual Studio 2013是最新版本) 该页面建议创建一个observeListSource类,该类继承自observeableCollection并实现IListS
DataGridView
,我在MSDN上找到了此演练。该页面上一次更新是在2016年10月,但似乎较旧(这意味着Visual Studio 2013是最新版本)
该页面建议创建一个observeListSource
类,该类继承自observeableCollection
并实现IListSource
(IListSource.Getlist
实现只返回一个IList
,该类是通过调用observeableCollection
上的ToBindingList
创建的,像这样:
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());
}
}
public class Category
{
private readonly ObservableListSource<Product> _products =
new ObservableListSource<Product>();
public int CategoryId { get; set; }
public string Name { get; set; }
public virtual ObservableListSource<Product> Products { get { return _products; } }
}
当我的导航属性声明为IList
时,我的DataGridView
似乎正在工作,但可能我还没有测试所有方面。我的问题是在EF 6/.Net 4.5中,导航属性的类型是实现IListSource
的ObservableCollection
还是早期版本中需要的解决方法
我意识到我可以继续创建
observeListSource
类,并将其用于我的所有导航属性,但我不想用一些不必要的东西(可能会导致问题)使我的代码复杂化。无法相信我在那里读到的内容。就像DAL的唯一任务是将实体绑定到DGV一样。即使是今天,也不会是明天。松耦合是稳定软件的关键。除非它是一个范围狭窄、寿命短暂的应用程序,否则甚至不要将实体绑定到UI。使用视图模型。@GertArnold我可以理解为什么这样做是有意义的,但是使用视图模型解决了ObservableListSource
类试图解决的一些问题,或者这个问题已经解决了吗?