实体框架4 - 如何更新对象

时间:2011-03-23 11:03:04

标签: c# entity-framework entity-framework-4

net 4和c#。

我有一个Object(myContentObj)和一个导航属性(CmsGroupsTypes)。

我需要更新特定对象的导航属性。

目前我使用下面的代码删除当前关联并添加一个新关联,因此我可以更新导航属性。

虽然我的代码有效,但我想知道你是否知道更好的方法...我不确定在EF4中是否存在UPDATE方法或类似方法。

感谢您的帮助!

            // Remove object
            myContentObj.CmsGroupsTypes.Remove(myCurrentGroupTypeObj);
            // Update object
            myContentObj.CmsGroupsTypes.Add(myNewGroupTypeObj);
            context.SaveChanges();

3 个答案:

答案 0 :(得分:1)

Context跟踪你的对象,只是从上下文中获取它,改变它的数据和Context.SaveChanges()

答案 1 :(得分:1)

这是正确的方法。您正在修改导航属性=您正在修改实体之间的关系。要删除实体之间的关系,您必须从导航属性中删除相关实体。要添加实体之间的关系,您必须将相关实体添加到导航属性。

唯一的问题可能是,如果您使用存在于DB中的实体调用Add但未从数据库(虚拟对象或分离实体)加载它。在这种情况下,EF将尝试再次将您的实体插入数据库。为避免这种情况,您必须使用附加实体(从DB加载)或将其状态设置为Unchanged

其他方式是使用外部关联,其中依赖实体也提供外键属性。您可以通过将此属性设置为父级的id来更改关系。这仅适用于一对一和一对多的关系。

请注意,从父级导航属性中删除实体不会从数据库中删除子实体的实体。因此,如果父对象的关系是依赖的,则还必须将其删除或SaveChanges抛出异常。

答案 2 :(得分:0)

我对此并不十分肯定,我现在无法检查,但我认为你可以直接改变它 myCurrentGroupTypeObj属性,然后执行

ObjectStateManager.ChangeObjectState(myCurrentGroupTypeObj , EntityState.Modified);

我希望它有效。如果没有,请告诉我。