在实体框架4中,我的数据库模型中有两个表(我们称它们为Info
和Data
),它们映射到实际的数据库表。在Info
表中,有一个将两个表链接在一起的DataId
列(表格始终为1:1)。在桌子上在实体框架中使用一个存储过程来插入两个表
重要的列有:
信息:
- 编号
- 数据ID =>链接到Data.id
- Property1
- Property2
数据:
- ID =>链接到Info.DataId
- 的Xml
- Property1
我写的存储过程来插入数据。此过程首先插入一行到Data
(这样我可以得到Data.id
值),然后在Info
中插入一行。当我拨打context.SaveChanges()
时,它会在代码中调用。
我将此存储过程设置为在XmlDataInfo
上完成插入时运行,因为它包含除Data.Xml
之外的所有过程需要的字段。
我遇到因为Data.Xml
在不同的表是两个问题...
如果我不设置/更改
Data.Xml
的INSERT
正常运行我的存储过程。当我设置该值时,实体框架也会尝试在Data
表上执行插入操作。我只希望它运行我的存储过程调用(在Info
表上),它插入到两个表中。我需要设置Data.Xml
,因为我的过程需要这个值,所以我不能让它为NULL。我无法弄清楚如何在存储过程映射中设置
Data.Xml
值。它不允许我选择要在属性下拉列表中使用的属性的子元素。
我看到了一些建议,在代码上Info
创建一个部分类,我能做到这一点的代码来访问此属性但部分类属性是不可用的模型,所以我还是不能选择它作为映射属性。
这就是我的问题。我还没有做过很多EF的工作,所以也许有一些我错过了或者做错了。
这似乎应该有某种方式我可以映射信息上的字段,可以获取/设置Data.Xml
,然后调用我的过程,而不尝试在Data
表上执行插入操作。我希望我可以添加某种只有代码属性的Info模型,我可以得到这个值,但我无法找到一种方式来做到这一点,它可以在存储过程映射中访问。
EF中正确的1:1关联。你应该放弃'Info.DataId'。 'Data.Id'应该指'Info.Id'(使Info'成为原理)。 *或*'Info.Id'应该引用'Data.Id'(使'Data'成为原则)。 –