gpt4 book ai didi

c# - 将 Attach 与 Linq To Sql 和存储过程结合使用

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:48 25 4
gpt4 key购买 nike

我正在尝试使用附加方法更新通过存储过程检索的实体。

存储过程设置为返回一个特定实例,该实例存在于我的 dbml 中。检索按预期工作并返回一个完全填充的对象。我需要使用存储过程的原因是我需要在检索该实体的同时更新该实体的属性。

在我检索到这个实体后,我使用 AutoMapper 将它映射到应用程序另一层中使用的另一个模型。该层执行一些操作,对实体进行更改,然后将其传回存储库进行更新。

存储库将该业务模型转换回数据库模型,并尝试将其附加到数据上下文以利用自动更新。

无论 Attach(entity, true) Attach(entity) 等的组合如何,它都会给我消息,如“未找到或更改行”或“无法添加具有相同主键的实体”。

有没有人对 Attach 方法有任何经验,以及如何使用它来更新不一定来自使用查询语法的数据上下文的实体(即在本例中为存储过程)?

非常感谢

最佳答案

首先,如果您正在创建对象的副本,进行更改,然后尝试将复制的对象附加到与其中包含原始对象的对象相同的 DataContext,那么这可能会导致“无法添加具有相同主键的实体”消息。处理此问题的一种方法是:1.从DataContext获取对象2. 进行更改并映射对象(反之亦然 - 无论顺序如何)3.用另一层中的新值更新原始对象4. 在包含原始对象的 DataContext 上提交更改

  1. 从 DataContext 中获取对象并关闭 DataContext
  2. 进行更改并进行映射
  3. 从要保存到的 DataContext 中检索对象
  4. 使用映射对象中的值更新该对象
  5. 提交更改

或者,当您说您正在使用 proc 因为您需要在检索它的同时更新属性,我需要查看 proc,但是如果您在检索信息后以某种方式提交此更新,那么消息“未找到或未更改行”确实是正确的。这很难做到,但如果您将数据加载到临时表中,进行更新,然后使用临时表中的选择来填充对象,则可以做到这一点。您可以尝试的一件事是在 L2S 设计器中将该属性设置为 AutoUpdate = Never 并查看是否可以解决问题。如果是这样,这就是你的问题。

关于c# - 将 Attach 与 Linq To Sql 和存储过程结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1889431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com