C# 使用LINQ更新SQL行中的每个字段而不明确声明每个字段?
我只是想知道是否有一种方法可以更新SQL行中的每个字段/属性,而不必为每个字段声明显式的“context.FieldName=model.FieldName” 我试着做的是:C# 使用LINQ更新SQL行中的每个字段而不明确声明每个字段?,c#,asp.net,sql-server,linq,asp.net-core,C#,Asp.net,Sql Server,Linq,Asp.net Core,我只是想知道是否有一种方法可以更新SQL行中的每个字段/属性,而不必为每个字段声明显式的“context.FieldName=model.FieldName” 我试着做的是: 将更新后的模型对象传递给方法 根据模型对象的ID从db上下文中获取DTO对象 如果不为null,请使用AutoMapper将中的模型对象转换为DTO对象 现在将原始DTO对象设置为新映射的DTO对象 更新数据库(这是它失败的地方) 保存上下文 但是,如果我显式地将每个DTO字段=设置为其对应的模型字段,它就会工作(显然)。
但是,如果我显式地将每个DTO字段=设置为其对应的模型字段,它就会工作(显然)。但是由于频繁的数据库更改,以及SQL字段的数量庞大,我希望避免在每次数据库更改时手动更新每个字段并维护它。如果您使用最新版本的automapper,您可以执行以下操作:
public void UpdateCustomer(Customer customer)
{
var customerTopdate=dbContext.Customers.Where(c=>c.Id=customer.Id);
var result=AutoMapper.Map<Customer>(customer,customerTopdate);
dbContext.SaveChanges();
}
public void UpdateCustomer(客户)
{
var customerTopdate=dbContext.Customers.Where(c=>c.Id=customer.Id);
var结果=自动映射(客户、客户截止日期);
dbContext.SaveChanges();
}
您可以将实体状态
用于实体
的更新
以及删除
和插入
更新
插入
删除
不要忘记在每次操作结束时调用SaveChanges()
欲了解更多信息,请访问
感谢你的回答。以下是我如何使用最新版本的AutoMapper使其工作的:
public void UpdateCustomer(Customer customer)
{
var customerTopdate=dbContext.Customers.Where(c=>c.Id=customer.Id);
if (customerTopdate != null {
_mapper.Map(customer,customerTopdate);
_context.SaveChanges();
}
}
您只需将模型对象映射到数据传输对象,然后将此对象附加到上下文,处于修改状态:
dbContext.Entry(dto).state=EntityState.modified代码>谢谢这是迄今为止最简单的解决方案。我更新了我的AutoMapper,它工作得完美无缺。然而,代码中唯一的错误是“var result=AutoMapper.Map(customer,customerTopdate);”应该是“var result=AutoMapper.Map(customer,customerTopdate);”@AnthonyMascia公平地说,他没有错。他只是显式地声明Map方法的返回类型。
dbContext.Entry(yourEntity).State = EntityState.Added;
dbContext.SaveChanges();
dbContext.Entry(yourEntity).State = EntityState.Deleted;
dbContext.SaveChanges();
public void UpdateCustomer(Customer customer)
{
var customerTopdate=dbContext.Customers.Where(c=>c.Id=customer.Id);
if (customerTopdate != null {
_mapper.Map(customer,customerTopdate);
_context.SaveChanges();
}
}