如何处理Entity Framework中的“辅助”键

时间:2009-03-12 09:34:34

标签: entity-framework mapping foreign-keys

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

例如,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),
  ...
}

我缺少什么能够在foo_foobar实体上创建Bars关联,从而创建Foo导航属性?

1 个答案:

答案 0 :(得分:3)

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

如果您有现有架构,我建议使用edm generator,因为这将创建EMDX文件,代码隐藏甚至视图代码(可能非常大)。如果您现有的方案非常大,请查看此post,其中说明了如何处理大型模式。

当您运行EDM生成器时,您将找到所有不受支持的内容。

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

  1. 数据类型'sql_variant'不是
    支持,列'ColumnName' 在'TableName'表中 排除。
  2. 表/视图'tableName'没有 有一个主键定义。钥匙 已被推断和定义 创建为只读表/视图
  3. 关系'RelationshipName' 有不属于的列 桌上的关键 关系的主要方面 这是不受支持的 关系被排除在外。
  4. 我们还发现,由于EDM生成的代码文件超过80 MB,Linq项目实际上已经很大程度地崩溃了Visual Studio。