是否可以在Entity Framework中的两个普通字段之间创建关联,从而忽略主键?

Tej*_*ejo 5 .net c# entity-framework

我在这三个表之间有以下情况:

替代文字

在我开始解释我在这里要完成的任务之前,让我澄清三件事:

  1. 我在EntityFramework上绘制了模型,但这实际上是数据库视图.假设字段类型匹配表;

  2. 我知道这个数据库模型很糟糕.但改变它是不可能的.我知道这会让我的生活更轻松.

  3. 我在这个项目上使用Visual Studio 2008和.Net 3.5.但我也接受基于Visual Studio 2010和.Net 4.0的解决方案.

所以,正如我试图在上面的图片中展示的那样,在我正在研究的这个项目中,我得到了这3个表.其中之一TransactionLine将文件关联到事务行,该事务行是完整事务的一部分.

现在,我在这里想要关联的是TransactionLineFile.但是,TransactionLine没有File表中的FileId字段.此表中的字段FileNumberFileType代表File上的复合键.事实上,FileFileNumberFileType永远不会重复.它们可能是主键,但话说再说一遍,我无法触及数据库结构.

我尝试通过将一对多的关联文件转换TransactionLine来关联TransactionLineFile.之后,我选择Association并切换到Mapping Details屏幕,然后选择Map to TransactionLine.

他要我填写模型屏幕的数据是:

  • 档案.FileId ;
  • TransactionLine.TransactionId ;
  • TransactionLine.FileNumber ;
  • TransactionLine.文件类型,

所有TransactionLine标量属性都由它们相应的数据库字段设置,这些字段具有相同的名称.但是当我要指定与File表的链接时,我可以指定的唯一标量字段是FileId,我在TransactionLine表上没有.

我还尝试将FileFileNumberFileType标量属性实体键标志设置为true,并将FileId实体标志设置为false,但没有成功,因为程序警告我数据库FileId是主键但是没有像上一样设置实体.

是否可以将TransactionLine FileNumberFileTypeFile链接?这种情况有没有解决办法?

特别注意:FileId确实是File的主键.其他表格通过此字段与其链接.该TransactionLine这里是一个例外常识规则.:(

Tej*_*ejo 2

我们实现了我们的目标:D。

\n\n

感谢Wily 博士的学徒为我们提供了有关解决方案的提示。

\n\n

这是我们所做的:

\n\n

替代文本

\n\n
    \n
  1. 我们创建了一个名为 VIEWFILEEXTRA 的视图,其中只有我们\xe2\x80\x99d 想要在关联中使用的字段;

  2. \n
  3. 之后我们基于这个视图创建了一个实体,命名为FileExtra;

  4. \n
  5. 将 FileExtra 映射到 VIEWFILEEXTRA(如果尚未完成);

  6. \n
  7. 将 FileNumber 和 FileType 从 FileExtra Entity Key 标志更改为 true;

  8. \n
  9. 从 File 中删除 FileNumber 和 FileType 标量属性;

  10. \n
  11. 在文件和 FileExtra 之间创建 1 对 1 关联;

  12. \n
  13. 设置关联映射中的标量属性指向 File\xe2\x80\x99s 数据库字段 FileNumber 和 FileType;

  14. \n
  15. 在 FileExtra 和 TransactionLine 之间创建一对多关联;

  16. \n
  17. 将关联映射指向 TransactionLine,并设置字段。

  18. \n
\n\n

那\xe2\x80\x99就是它。非常感谢您的关注和提示:D。

\n