c# - 在 Entity Framework 中使用一个存储过程插入到两个表中

标签 c# entity-framework

在 Entity Framework 4 中,我的数据库模型中有两个表(我们称它们为 InfoData),它们映射到实际的数据库表。在 Info 表中,有一个 DataId 列将两个表链接在一起(表始终为 1:1)。

表格中的重要列是:

信息:

  • 身份证
  • DataId => 链接到 Data.id
  • 属性(property)1
  • 属性(property)2

数据:

  • id => 指向 Info.DataId 的链接
  • XML
  • 属性(property)1

我写了一个存储过程来插入数据。此过程首先在 Data 中插入一行(因此我可以获得 Data.id 值),然后在 Info 中插入一行。当我调用 context.SaveChanges() 时,它在代码中被调用。

我将此存储过程设置为在 XmlDataInfo 上完成插入时运行,因为它包含该过程所需的所有字段,Data.Xml 除外。

由于 Data.Xml 在不同的表中,我遇到了两个问题...

  1. 如果我没有设置/更改 Data.XmlINSERT 会正确运行我的存储过程。当我设置该值时, Entity Framework 也会尝试在 Data 表上插入。我只希望它运行我的存储过程调用(在 Info 表上),该调用将插入到两个表中。我需要设置 Data.Xml,因为我的过程需要这个值,所以我不能将其保留为 NULL。

  2. 我不知道如何在存储过程映射中设置 Data.Xml 值。它不允许我选择要在属性下拉列表中使用的属性的子元素。

我看到一些关于在代码中的 Info 上创建分部类的建议,我可以这样做以在代码中访问此属性,但该分部类属性在模型上不可用,所以我仍然可以'不要选择它作为映射属性。


这就是我的问题。我还没有用 EF 做很多事情,所以也许我遗漏了一些东西或做错了。

似乎应该有一些方法可以在 Info 上映射一个可以获取/设置 Data.Xml 的字段,然后调用我的过程而不用尝试在 上插入数据表。我希望我可以向 Info 模型添加某种仅代码属性,我可以使用它来获取此值,但我想不出一种方法来做到这一点,因为它可以在存储过程映射中访问。

最佳答案

很难准确地说出您要在这里做什么。我认为您可能对 EF 或应该如何调用存储过程没有完整的了解。

需要注意的几点: 1. 你的存储过程应该负责插入到两个表中。从您的 C# 代码(通过 EF)调用它时,您不应该能够分辨出哪些表被插入了。 2. 如果您打算读/写数据,您的实体应该包括这两个表。如果您在实体中包含 Data,EF 应自动创建一个属性以写入 Data.Xml

现在,假设您的所有表列都是 varchars(字符串),除了您的 Id 是 PK(整数)。您的存储过程原型(prototype)如下所示:

int MyStoredProcedure(string dataProperty1, string infoProperty1, string infoProperty2)

当您从 C# 调用此函数然后调用 SaveChanges() 时,存储过程会将字符串插入到您的表中并返回给您 PK (int)插入到 Data 表中的记录。您现在可以使用此值稍后插入您的 Data.Xml

entities.Data.Where(r => r.id == PK).First().Xml = "some XML data";
entities.SaveChanges();

这将从您刚刚插入的 Data 中获取行(通过返回的 id 值),然后将一个值插入到 Xml 中专栏。

希望这能让事情变得更清楚一些。如果您有不同的结构/存储过程,请发布一些代码示例,以便我们能够为您提供更具体的建议。

关于c# - 在 Entity Framework 中使用一个存储过程插入到两个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34934672/

相关文章:

c# - 如何使用 ServiceStack JsonSerializer 序列化哈希表?

c# - 更改模型中的不同属性时更新 Entity Framework 属性

C#:获取列表中所有项目的任意属性的最大值和最小值

c# - 如何在弹出窗口周围添加阴影

c# - 以下 sql 查询的 linq 等价物是什么

c# - Entity Framework 6 Fluent 映射 - 一对多代码优先

entity-framework - Azure 移动应用程序 - Entity Framework - 缺少外键和其他属性

entity-framework - 使用 Entity Framework 刷新数据

c# - 具有延迟执行和 SQL 端分组的 EF Core Group By

c# - 获取 NEF 格式图像的拍摄日期