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

标签 c# .net entity-framework

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

alt text

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

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

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

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

因此,正如我尝试在上图中演示的那样,在我正在进行的这个项目中,我得到了这 3 个表。其中之一,TransactionLine,将文件关联到交易行,这是完整交易的一部分。

现在,我在这里尝试关联的是 TransactionLineFile。但是,TransactionLine 没有 File 表中的 FileId 字段。此表中的字段 FileNumberFileType 代表 File 上的复合键。事实上,FileFileNumberFileType 从不重复。它们可能是主键,但话又说回来,我无法触及数据库结构。

我尝试通过创建一对多的关联来关联TransactionLineFile,从File到< strong>交易行。之后,我选择Association 并切换到Mapping Details 屏幕,然后选择Map's to TransactionLine.

他让我在模型屏幕上填写的数据是:

  • 文件.FileId;
  • TransactionLine.TransactionId;
  • TransactionLine.FileNumber;
  • TransactionLine.FileType,

所有 TransactionLine 标量属性均由其对应的同名数据库字段设置。但是当我要指定与 File 表的链接时,我可以指定的唯一标量字段是 FileId,我在 >TransactionLine 表。

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

是否可以将 TransactionLine FileNumberFileTypeFile 链接起来?这种情况有什么解决方法吗?

特别说明:FileId确实是File的主键。其他表通过此字段与其链接。此处的 TransactionLine 是常识规则的一个异常(exception)。 :(

最佳答案

我们实现了目标 :D。

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

这是我们所做的:

alt text

  1. 我们创建了一个名为 VIEWFILEEXTRA 的 View ,其中仅包含我们希望在关联中使用的字段;

  2. 之后,我们基于这个 View 创建了一个实体,命名为FileExtra;

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

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

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

  6. 在文件和 FileExtra 之间创建一对一的关联;

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

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

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

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

关于c# - 是否可以在 Entity Framework 中的两个普通字段之间创建关联,从而忽略主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3586377/

相关文章:

c# - Entity Framework MySQL tinyint(1) System.Boolean.Parse FormatException

c# - 等待结果而不阻塞线程

c# - 使用 pocos 以声明方式定义 xml 序列化

c# - 将 java 字节转换为 c# 字节(序列化问题)

c# - 动态创建的命令按钮不触发命令

c# - 在Binder主持的Jupyter上设置C#和F#笔记本

entity-framework - 如何在Silverlight MVVM中从ViewModel关闭ChildWindow?

c# - 我如何首先使用带有 ef 代码的 wcf 数据服务公开 dto 对象?

c# - 如何像在 C++ 中一样在 C# 中创建引用成员变量

c# - 如何将 native 应用程序与 Eclipse 集成?