【问题标题】:How can i use SaveChanges() in order to save existing data?我如何使用 SaveChanges() 来保存现有数据?
【发布时间】:2017-12-05 19:58:44
【问题描述】:

我只需要在 SQL 中更改一些已经保存在我的数据库中的数据。

这是我的代码:

var userData = new MinciUsers
{
    ApplicationUserId = stringUserId,
    Name = userUnity.firstName,
    LastName = userUnity.lastName,
    DateOfBirth = date,
    Address = userUnity.address,
    CityId = null,
    CountryId = null,
    LanguageId = null,
};

dbContext.MinciUsers.Add(userData);
dbContext.SaveData();

当我更改一些数据时,它会抛出一个错误,因为主键已经存在。

更改数据时如何使用SaveChanges()

【问题讨论】:

  • 将条目的状态设置为已修改或依赖 ChangeTracking 并修改附加的条目(无需手动 .Add 再次将其添加到 DbSet 中,这会将状态设置为已添加)。您还可以使用条目的 .Property 方法进行修改,如果 ChangeTracking 被禁用,这也将起作用(尽管您必须在之前附加)

标签: c# sql-server database entity-framework savechanges


【解决方案1】:

一种方法是首先从数据库中获取相应的对象,然后通过指定新值来更改其状态。最后,您在相应的上下文类上调用 SaveChanges 以保持更改。

例如,如果主键在您的应用程序中表示为 Id:

var minciUser = dbContext.MinciUsers.SingleOrDefault(m => m.Id == 1);
if(minciUser != null)
{
    // The record with Id 1 has been found. So you can change it's state.

    minciUser.ApplicationUserId = stringUserId;

    // here you will add the rest of the fields you want to update.       

    dbContext.SaveChagnes();
}

更新

另一种方法 ii 是使用AddOrUpdate

var userData = new MinciUsers
{
    ApplicationUserId = stringUserId,
    Name = userUnity.firstName,
    LastName = userUnity.lastName,
    DateOfBirth = date,
    Address = userUnity.address,
    CityId = null,
    CountryId = null,
    LanguageId = null,
};

dbContext.MinciUsers.AddOrUpdate(userData);
dbContext.SaveChanges(); 

【讨论】:

  • 嗨克里斯托斯!谢谢你的回答!在这种情况下,“ApplicationUserId 是我的 ID
  • 我记得几年前我在脑海中看到过,某种插入函数dbContext 可以根据主键直接更新。有这样的吗?
  • 是的,伙计!这就是我需要的
  • 有一个方法调用AddOrUpdate,但需要注意如何使用它,michaelgmccarthy.com/2016/08/24/…
  • @Christos 很有趣!问题是我没有“AddOrUpdate”方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多