【问题标题】:Linq to entity delete a specific column from a tableLinq to entity 从表中删除特定列
【发布时间】:2011-12-13 08:51:12
【问题描述】:

Linq to entity 查询通过匹配条件从表中删除特定列

`

public ActionResult deleteChecks(string checkValue)
    {
        check_master checks = (from table in db.check_master
                              where table.check_code == checkValue
                              select table).First();
        //now how to delete/remove checks.mcheck

        return View("Edit");
    }`

只想从表 check_master 更新具有空值(选定行)的单个列元素

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-3 linq-to-entities


    【解决方案1】:

    您可以将单个属性(映射到列)设置为 null 并将其保存到数据库中

    foreach(check_master check in checks)
    {
       check.mcheck = null;
    }
    
    db.SaveChanges();
    

    【讨论】:

      【解决方案2】:
      using (NorthwindDataContext db = new NorthwindDataContext())
      

      {

      // Retrieve the existing entity. Database Call 1
      
      Product product = db.Products.First(p => p.ProductID == 1);
      
      
      
      // Change the properties. LINQ to SQL knows
      
      // these specific properties have changed.
      
      product.UnitsInStock = 14;
      
      
      
      // Flush the changes. Database Call 2
      
      db.SubmitChanges();
      

      }

      【讨论】:

      • 我在做什么.....check_master 检查 = db.check_master.First(a=> a.check_code == checkValue); db.DeleteObject(checks);.....但是在我的控制器中不支持使用 DeleteObject(甚至没有智能感知)......我是否缺少在我的代码中使用任何程序集
      • '使用 db 作为新的 HelloEfEntities Dim qStr = "Delete" & _ "FROM Employee" db.ExecuteStoreCommand(qStr) db.SaveChanges() End Using'
      【解决方案3】:

      实体框架仅适用于常量表方案。 请告诉我,您的全球目标是什么,可能有更合适的方式来实现。

      更新:

      foreach(var chm in db.check_master)
      {
          chm.mcheck = null;
      }
      db.SaveChanges();
      

      【讨论】:

        【解决方案4】:

        我认为 Linq to Entities 只支持 DML,不支持 DDL 操作。 所以你必须使用存储过程或 ADO.NET 原始查询。

        编辑

        你可以像这样进行简单的更新:

        public ActionResult deleteChecks(string checkValue)
        {
            check_master checks = (from table in db.check_master
                                  where table.check_code == checkValue
                                  select table).First();
        
            checks.mcheck = null;
            db.SaveChanges();
        
            return View("Edit");
        }`
        

        【讨论】:

        • 假设我想在我们的例子中删除一整行“检查”然后我可以简单地进行一个查询,比如 db.check_master.Remove(checks);.但是在我的问题中我想用 mcheck 列的“null”值更新我的表匹配(条件)行
        • 我不确定我是否理解您...所以您不想物理删除表列,您只想在此列中为所有行设置 NULL?
        • 是的,我不想删除整个列,我只想更新该列的一个元素(选定的)。假设我有一列的值 '1','2','4' 现在我想用 NULL 更新值 '2'
        • 哦,那么您的问题非常具有误导性,请编辑并更正此问题!你不想删除任何东西——甚至不是行,当然也不是列。你想要简单的更新。请参阅我的答案编辑。
        猜你喜欢
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        相关资源
        最近更新 更多