LINQ to SQL无法与Automapper一起正常工作

时间:2015-09-16 20:26:15

标签: c# linq linq-to-sql 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的新记录,则插入或更新。这里有趣的是插件工作但 ps.Application.Context.SubmitChanges(); 在我使用Automapper更新上下文时不起作用,就像我在上面的代码中所做的那样。

现在,如果我使用简单的属性赋值更新上下文,如下所示:

applicationToSave.Name = "Beautiful";
if (applicationToSave.ApplicationId == default(int))
{
    ps.Application.InsertOnSubmit(applicationToSave);
}
ps.Application.Context.SubmitChanges(); 

这个有效。我觉得Automapper对上下文对象做了一些事情,这使得它与数据库分离。我不确定。如何使其与AutoMapper一起使用?

1 个答案:

答案 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填充它。