在使用了全局Linq to Sql DataContext并进行了不需要的插入之后,我决定使用分离的方法。我是通过一个methods类做到这一点的,这个类作为从我的业务对象到DAL的抽象层。每个CRUD调用都有一个DataContext,所以我可以像这样调用。
using (DatabaseMethods<TEntity> db = new DatabaseMethods<TEntity>())
{
return db.GetAll();
}在DatabaseMethods构造函数中,我创建了一个新的DataContext。在DatabaseMethods.Dispose()中,我处理上下文,并将其设置为null。
DatabaseMethods中的GetAll使用dataContext来获取列表:
return this.dataContext.GetTable<TEntity>().ToList();问题是,当我绑定到实体时,我的组合框被填充(它们由类似的getAll调用填充),但是selectedItem没有显示。(例如:枪有一个GunType (通过外键链接)),但同一页面上的网格(绑定到同一对象)显示该项目的文本。会不会是WPF不知道如何比较两者,而知道它们是相同的?测试我的DatabaseMethods的单元测试表明加载是正确的。
我尝试关闭所有DataContexts的DeferredLoadingEnabled,并使用LoadWith函数在加载时获取描述符,但当UI第一次获取它时,它必须仍然为null。似乎UI必须尝试获取属性一次,然后第二次才能正常工作。调试时加载该属性(通过LoadWith设置)。
这是一个非常具体的问题,我一直在到处寻找关于我的问题是什么的线索。如果有人有什么建议,我将不胜感激。
编辑:答案是覆盖Equals。把问题打出来帮我把它弄清楚了。然后我刷新了这个页面,看到Michael Petito回答了。
发布于 2009-11-06 05:06:29
您在DatabaseMethods类的每个实例中使用不同的数据上下文。第一个数据上下文加载的用于检索Gun的GunType实例将是一个不同于用于填充组合框的第二个数据上下文加载的等效GunType的实例。
因为这两个GunTypes是不同的实例,所以它们不相等,除非您的GunType类显式覆盖了从Object继承的Equals方法,否则无法在组合框中获得正确的选定项。
例如:
public override bool Equals(object other)
{
return other is GunType && ID == ((GunType)other).ID;
}https://stackoverflow.com/questions/1683275
复制相似问题