繁体   English   中英

使用Entity Framework添加或更新实体的正确方法是什么

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM