如果赋值对象,实体框架会创建重复项

时间:2013-02-23 17:51:40

标签: wpf entity-framework unity-container

您好我已经使用PRISM和Unity,Entity Framework创建了一个小型WPF应用程序。

我有一个sharedInfo类,用于访问我在bootstapper中填充的当前登录用户,如果数据库包含与用户输入的详细信息匹配的用户。

我的用户可以在某些实体上创建笔记,我想知道是谁创建了笔记,因此我的笔记类具有SystemUser的导航属性。如果我创建一个新笔记并像这样设置属性:

note.SytemUser = _unityContainer.Resolve<ISharedInfo>("AppSharedInfo").LoggedInUser;

然后当我保存详细信息时,我会创建一个新的systemUser。如果我只是像这样设置Id属性,就不会发生这种情况:

note.SystemuserId =_unityContainer.Resolve<ISharedInfo>("AppSharedInfo").LoggedInUser.SystemUserId;

这对我来说似乎不对,如果我设置笔记的SystemUser属性,你能告诉我我在哪里出错以及导致我的用户详细信息重复的原因吗?

1 个答案:

答案 0 :(得分:0)

您最有可能将note添加到您的上下文中,如下所示:

context.Notes.Add(note);

此行不仅将note本身置于Added状态,而且还将note的所有相关对象(上下文实例尚不知道),即相关对象在州Detached。为了避免添加相关实体,您必须通过将相关实体附加到上下文(状态为Unchanged)之前明确告知EF您已知存在相关实体,然后才调用Add note

context.SystemUsers.Attach(note.SystemUser);
context.Notes.Add(note);