【发布时间】:2016-01-21 21:26:55
【问题描述】:
在 Entity Framework 4 中,我的数据库模型中有两个表(我们称它们为 Info 和 Data),它们映射到实际的数据库表。在Info 表中,有一个DataId 列将两个表链接在一起(表始终为1:1)。
表中的重要列是:
信息:
- 身份证
- DataId => 指向 Data.id 的链接
- 属性1
- 属性2
数据:
- id => Info.DataId 的链接
- XML
- 属性1
我写了一个存储过程来插入数据。这个过程首先在Data 中插入一行(这样我就可以得到Data.id 的值),然后在Info 中插入一行。当我调用context.SaveChanges() 时,它会在代码中调用。
我将此存储过程设置为在 XmlDataInfo 上完成插入时运行,因为它包含除 Data.Xml 之外的过程所需的所有字段。
由于Data.Xml 在不同的表中,我遇到了两个问题...
如果我不设置/更改
Data.Xml,INSERT将正确运行我的存储过程。当我设置该值时,实体框架也会尝试在Data表上进行插入。我只希望它运行插入两个表的存储过程调用(在Info表上)。我需要设置Data.Xml,因为我的程序需要这个值,所以我不能让它为NULL。我不知道如何在存储过程映射中设置
Data.Xml值。它不允许我选择要在属性下拉列表中使用的属性的子元素。
我看到一些建议在代码中在 Info 上创建部分类,我可以这样做以在代码中访问此属性,但该部分类属性在模型上不可用,所以我仍然无法选择它作为映射属性。
这就是我的问题。我还没有用 EF 做很多事情,所以也许我遗漏了一些东西或做错了。
似乎应该有某种方法可以在 Info 上映射一个可以获取/设置 Data.Xml 的字段,然后调用我的过程,而无需尝试在 Data 表上进行插入。我希望我可以在 Info 模型中添加某种纯代码属性,我可以使用它来获取此值,但我无法找到一种方法可以在存储过程映射中访问它。
【问题讨论】:
-
在 EF 中正确的 1:1 关联。你应该放弃
Info.DataId。Data.Id应参考Info.Id(制作Info的原理)。 或者Info.Id应该参考Data.Id(以Data为原则)。
标签: c# entity-framework