【问题标题】:ApplyPropertyChanges and ReferencesApplyPropertyChanges 和参考
【发布时间】:2009-07-14 20:03:26
【问题描述】:

我之前问过这个问题,但我认为我的措辞不正确,所以这里是第二次尝试。我有以下代码:

public User EditUser(User userToEdit)
{
    //userToEdit contains values for eagerly loaded contacts entity

    User originalUser = (from u in _entities.UserSet.Include("contacts")
                                 where u.ID == userToEdit.ID
                                 select u).FirstOrDefault();

    _entities.ApplyPropertyChanges(originalUser.EntityKey.EntitySetName, userToEdit);
    _entities.SaveChanges();

    return userToEdit;            
}

非常直接。但是,联系人实体不会更新。据我了解,急切加载会将实体添加到数据上下文中,因此当使用分离的 userToEdit 调用 ApplyPropertyChanges 时,对 userToEdit 中联系人的更改将应用​​于附加的联系人实体。我错过了什么?

【问题讨论】:

    标签: asp.net linq entity-framework linq-to-entities


    【解决方案1】:

    是的,这是一个名为“Independent Associations”的东西的不幸副作用

    在 EF 中(至少在 3.5 SP1 中)关系不被视为实体的一部分,即存在独立的。

    这意味着调用ApplyPropertyChanges(...) 只会影响在结构上属于实体的属性,而不是引用。

    所以你需要把你的代码改成这样:

    public User EditUser(User userToEdit){    
        //userToEdit contains values for eagerly loaded contacts entity    
        User originalUser = (from u in _entities.UserSet.Include("contacts")                                 
            where u.ID == userToEdit.ID                                 
            select u).FirstOrDefault();  
    
        _entities.ApplyPropertyChanges(originalUser.EntityKey.EntitySetName, userToEdit);  
        originalUser.Contacts = userToEdit.Contacts;
        _entities.SaveChanges();    
        return userToEdit;            
    }
    

    这假定 userToEdit.Contacts 是引用(不是集合),并且不为空。

    希望这会有所帮助 亚历克斯

    PS 在 .NET 4.0 Beta2 中,名为 FK associations 的东西将解决此问题,并使您的代码能够正常工作。

    【讨论】:

    • 非常感谢,看起来它可以解决问题。我急切地等待 4.0 的 beta 2,我在使用 EF 时遇到的大部分问题看起来都将得到解决。
    • 谢谢。您曾提到 userToEdit.Contacts 不是一个集合。如果 userToEdit.Contacts 是集合而不是参考,应如何进行更改。在我的情况下,该项目的类型为 EntityCollection。请帮忙。
    猜你喜欢
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 2021-04-12
    • 2015-04-06
    • 2016-12-16
    相关资源
    最近更新 更多