您好我已经使用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属性,你能告诉我我在哪里出错以及导致我的用户详细信息重复的原因吗?
答案 0 :(得分:0)
您最有可能将note
添加到您的上下文中,如下所示:
context.Notes.Add(note);
此行不仅将note
本身置于Added
状态,而且还将note
的所有相关对象(上下文实例尚不知道),即相关对象在州Detached
。为了避免添加相关实体,您必须通过将相关实体附加到上下文(状态为Unchanged
)之前明确告知EF您已知存在相关实体,然后才调用Add
note
:
context.SystemUsers.Attach(note.SystemUser);
context.Notes.Add(note);