我在这三个表之间有如下情况:
在我开始解释我要在这里完成的事情之前,让我澄清三件事:
我在EntityFramework上画了模型,但这实际上是数据库 View 。假设表之间的字段类型匹配;
我知道这个数据库模型很糟糕。但是改变它是不可能的。我知道这会让我的生活更轻松。
我在此项目中使用 Visual Studio 2008 和 .Net 3.5。但我也接受基于 Visual Studio 2010 和 .Net 4.0 的解决方案。
因此,正如我尝试在上图中演示的那样,在我正在进行的这个项目中,我得到了这 3 个表。其中之一,TransactionLine,将文件关联到交易行,这是完整交易的一部分。
现在,我在这里尝试关联的是 TransactionLine 和 File。但是,TransactionLine 没有 File 表中的 FileId 字段。此表中的字段 FileNumber 和 FileType 代表 File 上的复合键。事实上,File 的 FileNumber 和 FileType 从不重复。它们可能是主键,但话又说回来,我无法触及数据库结构。
我尝试通过创建一对多的关联来关联TransactionLine和File,从File到< strong>交易行。之后,我选择Association 并切换到Mapping Details 屏幕,然后选择Map's to TransactionLine.
他让我在模型屏幕上填写的数据是:
- 文件.FileId;
- TransactionLine.TransactionId;
- TransactionLine.FileNumber;
- TransactionLine.FileType,
所有 TransactionLine 标量属性均由其对应的同名数据库字段设置。但是当我要指定与 File 表的链接时,我可以指定的唯一标量字段是 FileId,我在 >TransactionLine 表。
我还尝试将 File 的 FileNumber 和 FileType 标量属性实体键标志设置为 true,并将 FileId 实体标记为 false,但没有成功,因为程序警告我数据库 FileId 是主键,但未像实体上那样设置。
是否可以将 TransactionLine FileNumber 和 FileType 与 File 链接起来?这种情况有什么解决方法吗?
特别说明:FileId确实是File的主键。其他表通过此字段与其链接。此处的 TransactionLine 是常识规则的一个异常(exception)。 :(
最佳答案
我们实现了目标 :D。
感谢博士。 Wily 的学徒给了我们有关解决方案的提示。
这是我们所做的:
我们创建了一个名为 VIEWFILEEXTRA 的 View ,其中仅包含我们希望在关联中使用的字段;
之后,我们基于这个 View 创建了一个实体,命名为FileExtra;
将 FileExtra 映射到 VIEWFILEEXTRA,如果尚未完成;
将 FileNumber 和 FileType 从 FileExtra Entity Key 标志更改为 true;
从文件中删除 FileNumber 和 FileType 标量属性;
在文件和 FileExtra 之间创建一对一的关联;
设置关联映射中的标量属性指向File的数据库字段FileNumber和FileType;
在 FileExtra 和 TransactionLine 之间创建一对多关联;
将关联映射指向 TransactionLine,并设置字段。
就是这样。非常感谢您的关注和提示:D。
关于c# - 是否可以在 Entity Framework 中的两个普通字段之间创建关联,从而忽略主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3586377/