如何处理Entity Framework中的"辅助"键

Ram*_*ses 6 mapping entity-framework foreign-keys

我正在评估对现有模式使用EF - 问题是我无法弄清楚如何在外键不是主表的主键的表之间建立关联.

作为一个例子,a foo可能有许多bars像这样的定义(原谅伪代码):

table foo {
  int foo\_id pk,
  char(10) foo\_code,
  ...
}

table foobar {
  int bar\_id pk,
  char(10) bar\_foo\_code fk(foo.foo\_code),
  ...
}
Run Code Online (Sandbox Code Playgroud)

我缺少什么能够创建foo_foobar关联,因此BarsFoo实体上创建导航属性?

Cra*_*lla 4

Linq toEntity 不支持不指向表主键的外键(请参阅日志消息 3)。Linq toEntity 会将其视为表中的普通字段。您将无法导航到它链接到的实体。

如果您有现有架构,我建议使用edm 生成器,因为这将创建 EMDX 文件、隐藏代码甚至视图代码(可能非常大)。如果您现有的方案非常大,请查看这篇文章,其中解释了如何处理大型方案。

当您运行 EDM 生成器时,您会发现所有不支持的内容。

查看之前的 EDMGen2.exe 日志,我们收到以下类型的消息:


  1. 支持数据类型“sql_variant”,表“TableName”中的列“ColumnName”被排除。
  2. 表/视图“tableName”没有定义主键。已推断出键并将定义创建为只读表/视图
  3. 关系“RelationshipName”包含不属于关系主端表键一部分的列,该关系不受支持,该关系已被排除。

我们还发现,Linq 项目实际上使 Visual Studio 崩溃了很多,因为 EDM 生成的代码文件远超过 80 mb。