首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架4.1 - TPT急切加载-“指定表达式的ResultType与所需类型不兼容”

实体框架4.1 - TPT急切加载-“指定表达式的ResultType与所需类型不兼容”
EN

Stack Overflow用户
提问于 2011-05-30 01:04:23
回答 1查看 1.4K关注 0票数 3

我有一个带有TPT继承的模型。

  • Location (摘要)
  • Street (源自位置)
  • GoogleStreetView (1 Street -> 0..1 GoogleStreetView)

上面的每一个都有自己的表。

在我添加"GoogleStreetView“表(它由PK/FK支持到Street)之前,一切都很好。

当我尝试这样做的时候:

代码语言:javascript
复制
var street = _locationRepository
   .Find()
   .OfType<Street>()
   .Include(x => x.GoogleStreetView)
   .SingleOrDefault(x => x.LocationId == 1);

我知道错误:

指定表达式的ResultType与所需类型不兼容。表达式'Transient.referencexxxx.Repositories.SqlServer.Location‘是'Transient.referencexxxx.Repositories.SqlServer.Street'.,但所需的类型是’Transient.referencexxxx.Repositories.SqlServer.Street‘.。参数名称:参数

什么.?

然后我找到了这条线,它基本上说这是一个带有EF 4的bug (从外观上看,它是EF4.1RTM)。

我不明白“使用一个独立的协会,没有支持的FK”的解决办法。

我使用存储库/ UoW模式,因此我的LocationRepository只能访问ObjectSet<Location>。因此,我不能在LINQ查询中进行显式联接。

在这个阶段,看起来我根本不需要映射这个表,而是使用存储过程从数据库中获取它。叹一口气。

有人能对此有所了解,并提出解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-30 01:26:49

好吧,我找到了一个解决办法。

那就是翻转FK。

因此,与其:

1 Street -> 0.1 GoogleStreetView

这是正确的,我现在有:

*街-> **0.1 GoogleStreetView

现在,Street有一个可空的FK,指向GoogleStreetView。

从代码的角度来看,这是很好的,但是从数据库的角度来看,这是完全错误的,因为由于缺乏引用完整性,一个特定的GoogleStreetView记录可能指向多条街道记录,这是没有任何意义的。

但这似乎是唯一合适的解决办法。

看起来EF不支持1-0.1由PK/FK组合支持的协会。

如果你问我是不能接受的。如果他们知道这是EF 4.0中的一个错误,为什么不在4.1中修复呢?

编辑

另外,上述解决办法也会奏效,不满意于破坏概念方面的参考完整性。

因此,我决定根本不映射这个实体,而是通过存储过程从DB中获取它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6171455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档