我在我的Entity Framework POCO类中映射了多对多关系 . 在数据库中,它是一个带有复合键的连接表,并且POCO属性生成正常 .
当我从上下文加载实体时,我可以从多对多集合中删除一个项目,并在保存更改时更新数据库 .
例如:
var item = context.Items.First();
item.OtherItems.Remove(item.OtherItems [0]);
context.SaveChanges();
但是,当分离的对象图从WCF返回时,我将其附加到上下文并将其标记为已修改 . 但这些变化并没有持续下去 .
例:
//这发生在silverlight客户端上
item.OtherItems.Remove(item.OtherItems [0]);
//并在服务器上
context.Items.Attach(项目);
context.ObjectStateManager.ChangeObjectState(item,EntityState.Modified);
context.SaveChanges();
在这种情况下,不会从数据库中的连接表中删除记录 . 任何想法我怎么能让这个工作?首先十分感谢 .
1 回答
更改对象状态标记您的实体已修改 . 您需要使用
ChangeRelationshipState
标记两个实体之间的已修改关系 - 这将在您的连接表上执行数据库修改 . 您需要将关系状态设置为已添加或已删除 .