0

我有一个数据库,其中有一个名为 m_AttentionFlags 的表,它引用 m_PermissionCollections 中的主键。我由此构建了一个 EntityFramework 模型并创建了一个 DomainService。

现在在客户端上使用 RIA,我已在控件初始化时将标志加载到本地上下文中:

var query = _context.GetM_AttentionFlagQuery(); 
_context.Load(query, OnGetM_AttentionFlag, null); 

然后我连接了一个按钮以将 m_PermissionCollection 添加到选定的 m_AttentionFlag。

if (lstSelected.SelectedItem != null) { 
if (!(lstSelected.SelectedItem is m_AttentionFlag)) 
{ 
return; 
} 
m_AttentionFlag flag = lstSelected.SelectedItem as m_AttentionFlag; 
m_PermissionCollection coll = new m_PermissionCollection(); //** 
flag.m_PermissionCollections = coll; //** 
_context.SubmitChanges(); 
}

奇怪的是,这会导致插入行为:具有相同字段值的附加 m_AttentionFlag 与关联的 m_PermissionCollection 添加到数据库中;原件保持不变,其 m_PermissionCollections 字段不受影响。有趣的是,如果您删除标记为 ** 的行并替换为对 m_AttentionFlag 上的简单公共属性的更新,例如 flag.Description = "new description",则更新将按预期进行。

DomainService 方法是向导生成的默认方法,唯一值得关注的是,更改 m_AttentionFlag 上的 m_PermissionCollections 字段会在将项目发送到服务器时将项目上的 EntityState 更改为已添加。

我在 RIA 服务论坛上问过这个问题,一位成员建议我寻找多个 DomainContext 实例,但 _context 成员只创建一次,这里列出的代码几乎是各种 Visual Studio 工具不生成的唯一代码. 关于这里发生了什么的任何想法?

非常感谢帮助。

史蒂夫

4

1 回答 1

0

事实证明,问题在于 VS2010 和 RIA 服务预览提供的默认 DomainService 实现。

问题在这里详细说明:

http://www.riaservicesblog.net/Blog/post/Bug-in-the-Create-DomainService-wizard.aspx

于 2010-01-10T10:39:06.733 回答