![](/img/trans.png)
[英]What is the simplest way to implement an Entity Framework 6 Add-or-Update method
[英]What is the correct way to add or update an entity with Entity Framework
我正在尝试从其余端点提取数据并将其保存到数据库中。 但是,我想更新一条记录(如果它已经存在),或者在不存在时创建它。
我有以下代码:
private void Sync()
{
using (var db = new context())
{
// get data from rest endpoint
foreach (var item in array)
{
// create entity
var myEntity = new MyEntity();
// Method 1
db.Entry(myEntity).State = EntityState.Modified;
// Method 2
db.myEntities.AddOrUpdate(e => new { e.att1, e.att2, }, myEntity);
}
db.SaveChanges();
}
}
哪一种方法更适合我想要的行为(如果有的话)?
尝试使用其主键从数据库中检索现有实体。 如果不存在,请创建一个新实体。 然后将属性映射到检索/创建的实体并保存。
using (var db = new context()) {
// get data from rest endpoint
foreach (var item in array) {
// try to retrieve existing entity
var myEntity = db.MyEntity.Find(item.Id);
// if entity does not already exist -> create new
if (myEntity == null) {
myEntity = new MyEntity();
db.MyEntity.Add(myEntity);
}
// map received values
myEntity.Property1 = item.Property1;
myEntity.Property2 = item.Property2;
}
// EntityState should be set automatically by EF ChangeTracker
db.SaveChanges();
}
有关API设计的旁注:大多数情况下,最好使用显式的创建和更新方法,因为这些用例往往会有所不同。 例如:如果某些值只能在创建实体时设置(例如,CreationTimestamp,CreatedBy),而不能在更新时设置,则拆分方法可以很好地解决此问题。 否则,您必须求助于在命令(IsUpdateUsecase)中发送其他标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.