【问题标题】:Update table record in generalized form using lambda expression使用 lambda 表达式以通用形式更新表记录
【发布时间】:2014-04-29 07:25:22
【问题描述】:

这是我的代码,它成功更新了tableBrand 表的记录,但我想以更规范的形式更新我的记录。

public bool Update(tableBrand brand)
{                
    if (brand == null)
    {
        throw new ArgumentNullException("brand");
    }
    tableBrand tmpBrand = Get(brand.BrandID);

    if (tmpBrand != null)
    {
        tmpBrand.BrandName = brand.BrandName;
        plaDatabaseEntities.SaveChanges();
    }
    return true;
}

注意:
这里只有 BrandName 和 BrandID 两列,所以我们可以正常更新。但是假设有 一个表中有 25 个列,然后我们必须以手动方式为每一列分配值。但我不想像上面那样更新我的表记录。我想更新表记录 如下代码和描述。这里Get(brand.BrandID)返回一个tableBrand对象。

public bool Update(tableBrand brand)
{        
   if (brand == null)
   {
       throw new ArgumentNullException("brand");
   }
   tablebrand tmpbrand = Get(brand.brandID);

   if (tmpbrand != null)
   {
       tmpbrand = brand;
       plaDatabaseEntities.SaveChanges();
   }
   return true;
}

据我所知,如果我们想更新表的任何记录,那么我们必须拥有该记录 id 才能触发查询并从数据库中获取数据。在上面的代码中,我可以使用brand.brandID 从数据库中获取记录。但是在这里我想像上面一样分配像 tmpbrand = brand; 这样的 tmpbrand 对象,但当时的问题是 tmpbrand 在这里被过度写入,有些我无法以上述方式更新我的记录。

我希望如果我们得到 brand 对象的所有字段,除了 brandID 并将所有字段分配给 tmpbrand 除了 brandID,那么我可以解决这个问题没有得到答案如何使用 lambda 表达式或 Linq 从brand 对象中获取所有归档,brandID 除外,并将所有归档分配给 tmpbrandbrandID 除外。

如果有人解决了这个问题,请帮助我...

【问题讨论】:

  • 品牌对象是如何创建的?您是否从数据库中读取它,如果是,如何读取?
  • brand 是 tableBrand 的一个对象。
  • tableBrand 是您创建的类还是由 Visual Studio 自动生成的?
  • 由Visual Studio自动生成

标签: c# linq lambda


【解决方案1】:

我不是 Linq To Sql 方面的专家,但我认为您有两种选择:

  1. 当调用 Update 方法时,brand 对象仍然附加到数据上下文。如果为真,则不必将其值复制到另一个对象。 Linq To Sql 为您跟踪更改。另请参阅example
  2. 当调用 Update 方法时,brand 对象附加到数据上下文。在这种情况下,您必须使用 Attach 方法,然后保存更改。同样,您不必将值从一个对象复制到另一个对象。另请参阅article

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多