我目前拥有一个拥有现有数据和新数据的模型.
作为一个例子,这是我的模型
public class NameDetails { public int Id { get; set; } public string Name { get; set; } }
这是它目前拥有的模拟数据
List<NameDetails> Names = new List<NameDetails>{ new NameDetails{Id = 1,Name = "Name 1"},new NameDetails{Id = 2,Name = "Name 2"},};
现在假设我需要将其保存到数据库中.我已经在表中有id = 1,所以应该是一个更新,因为id = 2应该是一个添加…我该怎么做?
以前,当我使用存储库编写保存时,我做了一个添加或编辑
像这样添加
context.NameDetails.Add(NameDetails); context.SaveChanges();
要么
编辑如此,
var recordToUpdate = context.NameDetails.FirstOrDefault(x => x.Id== 1); recordToUpdate.Name = "New name"; context.SaveChanges();
那么这是否意味着我必须循环浏览我的列表,找出什么是新的,什么是不是或还有另一种方式?
解决方法
您可以使用一些可与Entity Framework正常工作的约定.
例如,如果您在数据库中使用IDENTITY(1,1)(因此它会自动为插入的行生成ID),那么您的实体属性应该使用StoreGeneratedPattern
设置为身份(第一种模式的情况),并且您的Id属性具有0值表示尚未添加到数据库中.
那么你可以很容易地决定要添加什么,什么是更新.这里有一些伪(未测试)代码:
foreach (var entity in entities) { if (entity.Id == 0) { // Adds to the context for a DB insert context.Entities.Add(entity); } else { // Updates existing entity (property by property in this example,you could update // all properties in a single shot if you want) var dbEntity = context.Entities.Single(z => z.Id == entity.Id); dbEntity.Prop1 = entity.Prop1; // etc... } } context.SaveChanges();