LINQ to SQL 不能与 Automapper 一起正常工作
LINQ to SQL does not work properly with Automapper
我已经使用 Automapper 很长时间了,没有任何困难,最近我一直在尝试将这个很棒的工具集成到我的 LINQ to SQl 框架中。我有以下代码:
using (var ps = new Promotionalsponsorship(constr))
{
var applicationToSave = Mapper.Map<ApplicationModel, Application>(application);
if (applicationToSave.ApplicationId == default(int))
{
ps.Application.InsertOnSubmit(applicationToSave);
}
ps.Application.Context.SubmitChanges();
}
我在这里尝试做的是 UPSERT 方法,我是说如果有 id = 0 的新记录,则插入或更新。有趣的是,当我像上面的代码那样使用 Automapper 更新上下文时,插入有效但 ps.Application.Context.SubmitChanges(); 不起作用。
现在,如果我使用如下简单的 属性 赋值更新上下文:
applicationToSave.Name = "Beautiful";
if (applicationToSave.ApplicationId == default(int))
{
ps.Application.InsertOnSubmit(applicationToSave);
}
ps.Application.Context.SubmitChanges();
这个有效。我觉得 Automapper 对上下文对象做了一些事情,使其与数据库分离。我不知道。我怎样才能让它与 AutoMapper 一起工作?
更改跟踪仅适用于加载的实体。 Automapper 正在为您创建一个与 EF 完全无关的新对象——就代码而言,它只是一个普通对象。您需要执行以下操作:
using (var ps = new Promotionalsponsorship(constr))
{
var applicationToSave = ps.Application.Find(application.ApplicationId);
if (applicationToSave == null)
applicationToSave = new Application();
Mapper.Map(application, applicationToSave); //May not be accurate, search for the
//method that writes into an existing object
if (applicationToSave.ApplicationId == default(int))
{
ps.Application.InsertOnSubmit(applicationToSave);
}
ps.Application.Context.SubmitChanges();
}
也就是说,您加载现有应用程序(或创建一个新应用程序),然后用自动映射器填充它。
我已经使用 Automapper 很长时间了,没有任何困难,最近我一直在尝试将这个很棒的工具集成到我的 LINQ to SQl 框架中。我有以下代码:
using (var ps = new Promotionalsponsorship(constr))
{
var applicationToSave = Mapper.Map<ApplicationModel, Application>(application);
if (applicationToSave.ApplicationId == default(int))
{
ps.Application.InsertOnSubmit(applicationToSave);
}
ps.Application.Context.SubmitChanges();
}
我在这里尝试做的是 UPSERT 方法,我是说如果有 id = 0 的新记录,则插入或更新。有趣的是,当我像上面的代码那样使用 Automapper 更新上下文时,插入有效但 ps.Application.Context.SubmitChanges(); 不起作用。
现在,如果我使用如下简单的 属性 赋值更新上下文:
applicationToSave.Name = "Beautiful";
if (applicationToSave.ApplicationId == default(int))
{
ps.Application.InsertOnSubmit(applicationToSave);
}
ps.Application.Context.SubmitChanges();
这个有效。我觉得 Automapper 对上下文对象做了一些事情,使其与数据库分离。我不知道。我怎样才能让它与 AutoMapper 一起工作?
更改跟踪仅适用于加载的实体。 Automapper 正在为您创建一个与 EF 完全无关的新对象——就代码而言,它只是一个普通对象。您需要执行以下操作:
using (var ps = new Promotionalsponsorship(constr))
{
var applicationToSave = ps.Application.Find(application.ApplicationId);
if (applicationToSave == null)
applicationToSave = new Application();
Mapper.Map(application, applicationToSave); //May not be accurate, search for the
//method that writes into an existing object
if (applicationToSave.ApplicationId == default(int))
{
ps.Application.InsertOnSubmit(applicationToSave);
}
ps.Application.Context.SubmitChanges();
}
也就是说,您加载现有应用程序(或创建一个新应用程序),然后用自动映射器填充它。