Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ更新SQL行中的每个字段而不明确声明每个字段?_C#_Asp.net_Sql Server_Linq_Asp.net Core - Fatal编程技术网

C# 使用LINQ更新SQL行中的每个字段而不明确声明每个字段?

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字段=设置为其对应的模型字段,它就会工作(显然)。

我只是想知道是否有一种方法可以更新SQL行中的每个字段/属性,而不必为每个字段声明显式的“context.FieldName=model.FieldName”

我试着做的是:

  • 将更新后的模型对象传递给方法
  • 根据模型对象的ID从db上下文中获取DTO对象
  • 如果不为null,请使用AutoMapper将中的模型对象转换为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();
        }
    }