我在这三个表之间有以下情况:
在我开始解释我在这里要完成的任务之前,让我澄清三件事:
我在EntityFramework上绘制了模型,但这实际上是数据库视图。假设字段类型在表之间匹配;
我知道这个数据库模型很糟糕。但改变它是不可能的。我知道这会让我的生活更轻松。
我在这个项目上使用Visual Studio 2008和.Net 3.5。但我也接受基于Visual Studio 2010和.Net 4.0的解决方案。
所以,正如我试图在上面的图片中展示的那样,在我正在研究的这个项目中,我得到了这3个表。其中之一 TransactionLine ,将文件与事务行关联,这是完整事务的一部分。
现在,我在这里想要关联的是 TransactionLine 和文件。但是, TransactionLine 没有文件表中的 FileId 字段。此表中的字段 FileNumber 和 FileType 代表文件上的复合键。事实上,文件的 FileNumber 和 FileType 永远不会重复。它们可能是主键,但是再一次,我无法触及数据库结构。
我尝试通过将文件中的一对多的关联转换为<来关联 TransactionLine 和文件强> TransactionLine 即可。之后,我选择 Association 并切换到 Mapping Details 屏幕,然后选择 Map's to TransactionLine
他要求我填写模型屏幕的数据是:
所有 TransactionLine 标量属性都由相应的数据库字段设置,这些字段具有相同的名称。但是,当我要指定与文件表的链接时,我可以指定的唯一标量字段是 FileId ,我没有 > TransactionLine 表。
我还尝试将文件的 FileNumber 和 FileType 标量属性实体键标志设置为true,并将 FileId entity标志为false,但没有成功,因为程序警告我数据库 FileId 是主键但未在实体上设置为。
是否可以将 TransactionLine FileNumber 和 FileType 与文件相关联?这种情况有没有解决办法?
特别注意: FileId 确实是文件的主键。其他表格通过此字段与其链接。这里的 TransactionLine 是常识规则的一个例外。 :(
答案 0 :(得分:2)
我们达成了目标:D。
感谢博士。 Wily的Apprentice 给了我们关于解决方案的提示。
以下是我们的所作所为:
我们创建了一个名为VIEWFILEEXTRA的视图,其中只包含我们要在关联中使用的字段;
之后,我们基于此视图创建了一个名为FileExtra的实体;
将FileExtra映射到VIEWFILEEXTRA,如果尚未完成;
将FileExtra Entity Key标志中的FileNumber和FileType更改为true;
从文件中删除FileNumber和FileType标量属性;
在file和FileExtra之间创建1对1关联;
将关联映射中的标量属性设置为指向文件的数据库字段FileNumber和FileType;
在FileExtra和TransactionLine之间创建1对多的关联;
将关联映射指向TransactionLine,并设置字段。
就是这样。非常感谢您的关注和提示:D。