【问题标题】:How do I stop EF RIA services saving changes on related entities?如何停止 EF RIA 服务保存对相关实体的更改?
【发布时间】:2013-07-05 14:40:11
【问题描述】:

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

我有一个 Parent 对象,我们称它为 Class A。 A 类具有 B 类的集合。 ClassB 有一个 ClassC 的实例。

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

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

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

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

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

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

虽然我们为 ClassA 提供了包含 ClassB 的元数据类,并且为 ClassB 提供了包含 ClassC 的元数据,但没有用于 Class C 的元数据类。

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

【问题讨论】:

    标签: c# entity-framework silverlight ria


    【解决方案1】:

    在调用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多