我很长一段时间没有任何困难地使用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的新记录,则插入或更新。这里有趣的是插件工作但 ps.Application.Context.SubmitChanges(); 在我使用Automapper更新上下文时不起作用,就像我在上面的代码中所做的那样。
现在,如果我使用简单的属性赋值更新上下文,如下所示:
applicationToSave.Name = "Beautiful";
if (applicationToSave.ApplicationId == default(int))
{
ps.Application.InsertOnSubmit(applicationToSave);
}
ps.Application.Context.SubmitChanges();
这个有效。我觉得Automapper对上下文对象做了一些事情,这使得它与数据库分离。我不确定。如何使其与AutoMapper一起使用?
答案 0 :(得分:1)
更改跟踪仅适用于已加载的实体。 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填充它。