c# - 当我调用 SaveChanges 时,没有任何内容保存回数据库?

标签 c# entity-framework automapper

        editableCustomers = _ctx.Customers.ProjectTo<EditableCustomer>().ToList();
        editableCustomers.First().Name = "changed";
        var customers = _ctx.Customers.ToList();
        Mapper.Map(editableCustomers, customers);

         _ctx.SaveChanges();

我使用 Automapper 执行 EF 实体(在本例中为客户)和可编辑模型 (EditableCustomer) 之间的映射。 为什么 SaveChanges 不起作用?

最佳答案

通常您会使用 AutoMapper:

var results = Mapper.Map<DestinationType>(source);

或者在你的情况下

var results = Mapper.Map<Customer[]>(editableCustomers);

此外,AutoMapper 不会更改上下文中的值,而只是将对象从一种形式转换为另一种形式。目前看来您只是在转换对象,之后对这些对象什么也不做。上下文也不知道这些更改。

通常为了保存更改我宁愿使用这样的代码:

var customer = _ctx.Customers.Single(c => c.Id == modifiedEditableCustomer.Id);
customer.Name = modifiedEditableCustomer.Name;

_ctx.SaveChanges();

modifiedEditableCustomer 是您的 EditableCustomer 之一(您可以遍历它们)。

这是迭代客户并保存更改对象的另一种方法。如果对象已更改(您需要确定这一点),那么您可以重新附加该对象并将其状态设置为已修改。

foreach (var customer in customers)
{
    if (HasCustomerBeenModified(customer))
    {
        _ctx.Customers.Attach(customer)
        _ctx.Entry(customer).State = System.Data.Entity.EntityState.Modified;
    }

    _ctx.SaveChanges();
}

关于c# - 当我调用 SaveChanges 时,没有任何内容保存回数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48084805/

相关文章:

c# - 尽管有 PK,但 Context.SubmitChanges() 不更新

c# - 如何渲染网站的预览图像?

C# 反射 - 在运行时确定依赖项的位置

c# - .Net Core 解决方案中每个项目的 Automapper 不同配置文件

c# - 实体核心映射实体类型与连接表

c# - 来自 C# 的 XSLT 参数(XML 到 XML)

.net - 使用 Entity Framework 4 的领域驱动设计

c# - 将查询中的 Expression<Func<T, bool>> 与 bool 进行比较

c# - 使用 lambda 表达式获取第一个项目属性

c# - NHibernate 可以在子查询不引入EXISTS时在select list中指定一个表达式