【问题标题】:Attaching entity with association for modify附加具有关联的实体以进行修改
【发布时间】:2011-07-10 12:37:28
【问题描述】:

我会修改带有关联集合的分离实体,例如:

Person 和 Address 是 POCO。

当我附加实体并保存更改时,未检测到集合更改,如何使用地址更新人员(添加和删除的项目)?

我要手动跟踪我的收藏吗?

编辑

分离的POCO的同步必须是手动的...... EF不打算合并集合的解决方案(导航属性和关系):(

我比较当前和原始集合并发现差异

【问题讨论】:

标签: c# .net entity-framework poco persistence-ignorance


【解决方案1】:

您还可以使用分离的 POCO 类,然后将其重新附加到上下文并将状态设置为已修改:

阅读这篇文章:http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx

【讨论】:

    【解决方案2】:

    如果您使用的是实体框架,我假设您使用的是实体框架,因为您在问题上将其列为标签,那么对象只会在实体上下文生成它们时跟踪它们的更改。

    User someUser = dbEntities.Users.Single(x => x.Username == "test");
    someUser.Name = "changed name";
    db.SaveChanges();
    

    该代码将检测更改并将其持久化。

    User someUser = new User()
    {
        Username = "test" //assuming there is already user called test in the database.
    }
    

    以这种方式创建用户将不允许 EF 上下文检测更改。相反,您需要从数据库中加载实体,对其进行更新,然后将更改持久化。

    string username = "test";
    User someUser = db.Users.Single(x => x.Username == username);
    TryUpdateModel(someUser, valueProvider); //valueProvider is usually a form collection of some sort, but could be anything that implements IValueProvider.
    db.SaveChanges();
    

    这将允许您拉入一个实体、更新它并保存更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-23
      • 2012-07-10
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      相关资源
      最近更新 更多