Entity framework 这真的是更新分离实体的最佳方法吗?

Entity framework 这真的是更新分离实体的最佳方法吗?,entity-framework,entity-framework-5,webforms,Entity Framework,Entity Framework 5,Webforms,我有以下代码: 取得联系 public Contact LoadContactFromId(int contactId) { using(var ctx = new ContactContext()) { var contact = ctx.Contacts.AsNoTracking().First(c => c.ContactId == contactId); return contact;

我有以下代码:

取得联系

public Contact LoadContactFromId(int contactId)
    {
        using(var ctx = new ContactContext())
        {
            var contact = ctx.Contacts.AsNoTracking().First(c => c.ContactId == contactId);

            return contact;
        }
    }
更新联系人

public void UpdateExistingContact(Contact updatedContact)
    {
        using(var ctx = new ContactContext())
        {
            ctx.Contacts.Attach(updatedContact);

            ctx.Entry(updatedContact).State = EntityState.Modified;

            foreach (var item in updatedContact.ContactPoints)
            {
                ctx.Entry(item).State = (item.ContactPointId == 0) ? EntityState.Added : EntityState.Modified;
            }

            ctx.SaveChanges();
        }
    }
我目前正在使用ASP.NET webforms,由于其无状态模型,我无法在
DbContext
中继续工作。因此,我最终基本上从POST数据中重新创建了整个
Contact
实体,然后对其进行更新

这似乎是一种可怕的方式,因为我失去了Conncurncey分辨率,因为我没有使用真正的原始实体,而且总是要重新创建对象似乎有点麻烦


有没有更简单的方法?我看错了吗?

为什么不加载
联系人
,根据您的帖子数据更新其属性,然后一次性保存?换句话说,为什么要从头开始创建一个新的
联系人
实体?@JeremyTodd我还没有找到一个好方法来更新实体的
导航属性
。更新
标量属性
是一件繁琐的事情。例如,如果我得到了原始实体和更新的实体,我如何能够轻松地同步
导航属性
,而不必编写整个方法来处理它?到目前为止我还没有看到一个。如果我有一个属性,其中唯一的定义字段是entitiy键,那么我必须来回传递它才能知道需要更新哪些属性。为什么会丢失并发解析?@bmused没有丢失,但要跟踪它,我必须将其发送到客户机,或者重新查询数据库以获取它,然后提交新实体。我想要更多的工作。当我可以轻松地将导航属性同步到原始对象时,我真的在寻找一个“轻松按钮”。目前看不到出路。