如何停止EF RIA服务以保存相关实体的更改?

时间:2013-07-05 14:40:11

标签: c# entity-framework silverlight ria

使用RIA服务和EF5 从数据库生成的EF模型。

我有一个Parent对象让我们称之为A类。 A类有一系列ClassB。 ClassB有一个ClassC实例。

因此,在我看来,用户输入一些数据,默认工作流程将为他们生成一个ClassB的bucnh。但是,他们希望能够选择他们实际创建的那些。

因此,我创建了一个包装器,其中包含新的ClassB项,其中包含将ClassB添加到Class A集合的实际操作的委托。

因此,如果A类默认为具有2ClassB,但我取消选择第一个,然后执行所需操作并保存我的更改,我注意到我的Class A的ClassB集合只正确包含一个ClassB,但是当我调用时SaveChanges在上下文中都保存了日记项目。

我意识到当我将ClassC添加到ClassB时,ClassB会自动添加到ClassB的Class Cs集合中。

因此,当我在上下文中调用savechanges时,虽然我只将一个ClassB添加到ClassA,但两者都被保存,因为它们已被添加到ClassC

由于ClassC只映射到本质上是一个查找表,我们无需编辑或保存更改,我们还没有为它实现任何CRUD功能。

虽然我们有classA的元数据类,包含ClassB,而ClassB的元数据包含ClassC,但C类没有元数据类。

我有什么想法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

在调用SaveChanges之前,使用EntitySet的Remove函数删除不想添加到数据库的实体,例如

dim context as new MyDomainContext
dim a as New ClassA
dim b as New ClassB
b.ClassA = a
context.ClassB.Add(b)     'Both a and b are added to the context
context.ClassA.Remove(a)  'Remove just a from the context
context.SubmitChanges()   'Submit only b