【问题标题】:Entity Framework relationship between columns of different types不同类型列之间的Entity Framework关系
【发布时间】:2016-06-15 11:17:21
【问题描述】:

我有一个现有的数据库,可以说我无法更改。该数据库中的一张表具有以下结构:

Table Foo
FooKey         UNIQUEIDENTIFIER
ParentFooKey   VARCHAR(36)

所以基本上每一行都可以与其在同一个表中的父级有关系。

我正在尝试使用 EF fluent API 映射这种关系,但由于两列之间的类型不同而遇到了麻烦。

我尝试在我的 Foo 类中创建一个属性,它只是将 ParentFooKey 解析为一个 Guid,但是当我尝试在 Fluent API 中使用它时,我收到一个错误,因为该属性没有映射到 EF 中。

或者,有没有办法将ParentFooKey 映射为 EF 中的 Guid? ParentFooKey 列中的值始终是 GUID 的字符串表示形式或 NULL。

【问题讨论】:

  • SQL 中的外键列应该有相同的值,所以为什么 EF 不允许你这样做。如果你有这个问题,那就意味着你设计的模型错误。阅读有关 SQL 中外键的更多信息。
  • 谢谢,我很感激,但不幸的是模型很旧,我没有设计它。因此出现了问题。

标签: c# entity-framework ef-fluent-api


【解决方案1】:

据我所知,你不能。 您必须查询您需要的内容,例如:

YourContext.YourDbSet.Where(x=>x.FooKey == parentKey)

您还可以为字符串创建一个扩展方法,将其转换为 GUID,让您的生活更轻松。类似的东西:

public Guid ToGuidOrDefault(this string s){
Guid guid = Guid.Empty;
Guid.TryParse(s, out guid){
return guid;

}

【讨论】:

  • 我认为可能是这种情况,但如果可能的话想避免这种情况,因为这种方式意味着对从 1Foo1 返回的每一行进行单独调用
  • 您可以自己输入连接要求,以便 EF 相应地创建查询。但是,我不认为 Guid.Parse 调用可以翻译成 SQL。
  • 将答案标记为同意在没有额外调用的情况下在 EF 中似乎是不可能的。
猜你喜欢
  • 2011-11-03
  • 2018-03-26
  • 2018-10-31
  • 2013-04-13
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多