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/