Linq to sql 导致重复插入的Linq到SQL EntitySet记录
在WPF应用程序中,我在多层应用程序中使用Linq to SQL 这是一个考古照片归档申请,因此每个挖掘都有相应的图片,因此是一对多的关系。这个关系是由我用来创建POCO的SQLMetal正确创建的 这就是我遇到的问题: 通过UnitOfWork模式保存新对象或更改对象的更改,方法如下:Linq to sql 导致重复插入的Linq到SQL EntitySet记录,linq-to-sql,Linq To Sql,在WPF应用程序中,我在多层应用程序中使用Linq to SQL 这是一个考古照片归档申请,因此每个挖掘都有相应的图片,因此是一对多的关系。这个关系是由我用来创建POCO的SQLMetal正确创建的 这就是我遇到的问题: 通过UnitOfWork模式保存新对象或更改对象的更改,方法如下: using (IUnitOfWork unitOfWork = UnitOfWork.Begin()) { //if this is a new record
using (IUnitOfWork unitOfWork = UnitOfWork.Begin())
{
//if this is a new record
if (SelectedExcavation.excavation.ExcavationId == 0)
{
IsNewRecord = true;
excavService.Add(SelectedExcavation.excavation);
}
//send the actual changes to the dbms
unitOfWork.Commit();
}
一切正常
巴特特
每当更新至少有一条对应图片记录的记录时:
1插入新的挖掘记录
2更新当前挖掘记录
3以前的图片记录将其Id更改为新创建的挖掘Id
引擎盖下发生了什么?
LINQtoSQL不能处理这样简单的更新场景吗
提前感谢在这个WPF应用程序中,我使用Unity注册IDataContext,它作为构造函数参数传递给IUnitOfWork 实际上,我使用的是多层体系结构,它应该始终为我提供一个单独的IUnitOfWork对象,从而为我提供一个单独的IDataContext,但我想假装这种行为,使IUnitOfWork始终是同一个实例,从而使我的应用程序中的IDataContext实例在任何地方都是相同的 这意味着,就datacontext而言,应用程序实际上使用的是一个经典的两层应用程序 。。。我使用Unity解析的实例实际上在我的应用程序中到处都是相同的,我使用了这些实例的GetHashCode来证实这一点 所以一切似乎都按预期进行 但正如我在上一篇文章中所述,每当一条记录有相应的EntitySet记录并被更新时,Datacontext会立即按照以下顺序执行: 1插入主记录,其中包含更改前记录中的原始值 2在步骤1中,详细记录的更新将其Id更改为新的主记录 3使用更改的新值更新主记录 步骤1和2不应该出现,而只有步骤3是正确的,并且应该是Datacontext中唯一出现的步骤 我在很多博客上读到,为了克服这种情况,你必须附加/分离并做一些黑魔法,但正如我所悲伤的:到处都只有一个相同的DataContext,所以记录总是附加到它,所以这种现象不应该出现!还是我遗漏了什么
感谢您的帮助 我对您的UnitOfWork模式作业有感觉,您如何处理多层Linq 2 Sql?是否附着对象并对其进行更新?或者再次查询数据库并使用从某处获得的实例更改值!事实上我什么都没做!附加只会产生错误!我确信Entityset导致了这种行为,但不知道如何处理!