如何使用Entity Framework .NET Core

时间:2019-05-24 07:58:06

标签: c# sql entity-framework-core

我只想根据下面提到的条件更新字段。我知道如何用SQL编写它。我不确定如何在实体框架中完成此操作。

UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime

由于要使用微服务架构,因此我想使用此特定查询。

4 个答案:

答案 0 :(得分:2)

如果Id是主键,这意味着您只能找到一条记录,那么我更新它的方式就是检索记录,更改要编辑的属性的值,然后保存上下文的变化。

int MyId = ...
DateTime NewDateTime = ...

using (YourDbContext dbContext = new YourDbContext())
{
   YourObject obj = dbContext.YourObjects.SingleOrDefault(item => item.Id == MyId && item.SomeDateTime > NewDateTime)
   if (obj != null)
   {
      obj.SomeDateTime = NewDateTime;
      dbContext.SaveChanges();
   }
}

答案 1 :(得分:0)

我会这样:

 try
            {
               var usersToUpdate = await dbContext.MyList.Where(x=>x.Id==myId).ToListAsync();

               usersToUpdate.ForEach(x=>{..make updates..});

                await dbContext.SaveChangesAsync();
            }
            catch (Exception e)
        {
           ..Error handling..
        }

P.S,如果您想查看更新了多少条记录,可以将变量分配给saveChangesAsync:

var result= await dbContext.SaveChangesAsync();

答案 2 :(得分:0)

您可以使用以下示例代码来查找数据库的特定记录,然后借助EF Core对其进行更新:

public bool UpdateTable()
{
    DatabaseContext _db = new DatabaseContext(); //database context instance
    int MyId = 100; //sample Id
    DateTime MyDateTime = new DateTime(2019, 5, 24, 12, 30, 52); //sample DateTime
    var p = _db.Table.Where(x => x.Id == MyId && x.SomeDateTime > 
        MyDateTime ).FirstOrDefault(); //the targeted record of the database
    if (p != null)
    {
       p.SomeDateTime = DateTime.Now;
       _db.SaveChanges();
       return true;
    }
    return false;
}

答案 3 :(得分:0)

如果您想直接使用sql,可以使用ExecuteSqlCommand

如果要处理一个对象然后进行更新,我将更改一个对象并调用SaveChanges,但事实并非如此。.这是直接对该表的更新,如果该表有数百万行您想要执行sql以获得性能。

示例

using(var context = new SampleContext())
{
    var commandText = "UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime";
    var newDateTime = new SqlParameter("@NewDateTime", myDateValue);
    var myId = new SqlParameter("@MyId", myIdValue);

    context.Database.ExecuteSqlCommand(commandText,  new[]{newDateTime,myId});
}