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

时间:2010-08-27 16:46:00

标签: c# .net entity-framework

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

alt text

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

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

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

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

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

    现在,我在这里想要关联的是 TransactionLine 文件。但是, TransactionLine 没有文件表中的 FileId 字段。此表中的字段 FileNumber FileType 代表文件上的复合键。事实上,文件 FileNumber FileType 永远不会重复。它们可能是主键,但是再一次,我无法触及数据库结构。

    我尝试通过将文件中的一对多的关联转换为<来关联 TransactionLine 文件强> TransactionLine 即可。之后,我选择 Association 并切换到 Mapping Details 屏幕,然后选择 Map's to TransactionLine

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

    • 文件 FILEID ;
    • TransactionLine TRANSACTIONID ;
    • TransactionLine FileNumber ;
    • TransactionLine 即可。文件类型

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

    我还尝试将文件 FileNumber FileType 标量属性实体键标志设置为true,并将 FileId entity标志为false,但没有成功,因为程序警告我数据库 FileId 是主键但未在实体上设置为。

    是否可以将 TransactionLine FileNumber FileType 文件相关联?这种情况有没有解决办法?

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

1 个答案:

答案 0 :(得分:2)

我们达成了目标:D。

感谢博士。 Wily的Apprentice 给了我们关于解决方案的提示。

以下是我们的所作所为:

alt text

  1. 我们创建了一个名为VIEWFILEEXTRA的视图,其中只包含我们要在关联中使用的字段;

  2. 之后,我们基于此视图创建了一个名为FileExtra的实体;

  3. 将FileExtra映射到VIEWFILEEXTRA,如果尚未完成;

  4. 将FileExtra Entity Key标志中的FileNumber和FileType更改为true;

  5. 从文件中删除FileNumber和FileType标量属性;

  6. 在file和FileExtra之间创建1对1关联;

  7. 将关联映射中的标量属性设置为指向文件的数据库字段FileNumber和FileType;

  8. 在FileExtra和TransactionLine之间创建1对多的关联;

  9. 将关联映射指向TransactionLine,并设置字段。

  10. 就是这样。非常感谢您的关注和提示:D。