0

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

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

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

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

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

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

这对我来说似乎是错误的,如果我设置注释的 SystemUser 属性,你能告诉我我哪里出错了吗?是什么导致我的用户详细信息重复?

4

1 回答 1

0

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

context.Notes.Add(note);

这条线不仅将note自身置于Added状态,而且note将上下文实例尚不知道的所有相关对象置于状态,即处于状态的相关对象Detached。为了避免同时添加相关实体,您必须明确告诉 EF 您知道相关实体已经存在,方法是在Unchanged调用之前Add将其附加到上下文(在 state 中) note

context.SystemUsers.Attach(note.SystemUser);
context.Notes.Add(note);
于 2013-02-23T18:50:24.470 回答