【问题标题】:Entity Framework Update Statement实体框架更新声明
【发布时间】:2012-04-27 16:06:55
【问题描述】:

我正在尝试根据用户选择更新特定记录。关于实体框架语法,我不是很熟悉。是否可以在Entity FrameWork中实现这条SQL语句?

谢谢!

  update Table1
  set Colum1='1'
  where Column2='1234567'

【问题讨论】:

    标签: vb.net asp.net-mvc-3 entity-framework-4.3


    【解决方案1】:
    var record = _db.Table1.where(r => r.Column2 == '1234567');
    record.Column1 = '1'
    _db.SaveChanges();
    

    其中 _db 是实体框架 DbContext 类...

    HTH。

    【讨论】:

    • 宾果游戏。做到了。谢谢!
    【解决方案2】:

    是的,Linq 版本:

    Table1Entity entity = from e in dbContext.Table1Entitys
                          where e.Column2 = '1234567'
                          select e
    
    entity.Column1 = '1';
    dbContext.SaveChanges();
    

    看起来 Sunny 有Lambda version。

    但是,无论是这个还是 Sunny 的答案都不会产生确切的 SQL,因为它们实际上都产生了一个 SELECT 和一个 UPDATE:

    SELECT <all columns>
    FROM <table>
    WHERE Column2 = '1234567'
    
    UPDATE <table>
    SET <allcolumns> = <allvalues>, etc etc
    WHERE Column2 = '1234567'
    

    如果您只想更新,那么您可以执行以下操作:

    var row = new Row();
    // assuming a single column PK (id)
    row.Column1 = '1';
    row.Column2 = '1234567';
    dbContext.Attach(row);
    var entity = dbContext.Entity(entity);
    entity.Property(e => e.Column2).IsModified = true;
    dbContext.SaveChanges();
    

    准确地产生:

    UPDATE <Table>
    SET Column2 = '1234567'
    WHERE Column1 = '1'
    

    【讨论】:

      【解决方案3】:

      // 注意:ctx = 你的 DbContext

        var tbl1 = (from t in ctx.Table1 where t.Id == 1234567 select t).FirstOrDefault();
        if (tbl1 != null) {
            tbl1.Column1 = "1";
            ctx.SaveChanges();
      
        }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-23
        • 1970-01-01
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多