0..1 GoogleStreetView) 以上每个都有自己的表格。 在我添加-6ren">
gpt4 book ai didi

c# - Entity Framework 4.1 - TPT 预加载 - "The ResultType of the specified expression is not compatible with the required type"

转载 作者:行者123 更新时间:2023-11-30 16:29:39 25 4
gpt4 key购买 nike

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

  • 位置(抽象)
  • 街道(派生自位置)
  • GoogleStreetView(1 街道 -> 0..1 GoogleStreetView)

以上每个都有自己的表格。

在我添加“GoogleStreetView”表(由到 Street 的 PK/FK 支持)之前一切正常。

当我尝试这样做时:

var street = _locationRepository
.Find()
.OfType<Street>()
.Include(x => x.GoogleStreetView)
.SingleOrDefault(x => x.LocationId == 1);

我得到错误:

The ResultType of the specified expression is not compatible with the required type. The expression ResultType is 'Transient.reference[xxxx.Repositories.SqlServer.Location]' but the required type is 'Transient.reference[xxxx.Repositories.SqlServer.Street]'. Parameter name: arguments[0]

什么……?

然后我找到this thread这基本上表明这是 EF 4(和 EF 4.1 RTM,从外观上看)的错误

我不明白“使用独立关联,没有支持 FK”的解决方法。

我使用 Repository/UoW 模式,所以我的 LocationRepository 只能访问 ObjectSet<Location> .所以我不能在 LINQ 查询中进行显式连接。

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

谁能阐明这一点并提供解决方案?

最佳答案

好的,我找到了一种解决方法。

那就是翻转 FK。

所以代替:

1 Street -> 0..1 GoogleStreetView

这是正确的,我现在有:

* Street -> **0..1 GoogleStreetView

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

从代码的角度来看,它工作正常,但从数据库的角度来看,这是完全错误的,因为缺乏参照完整性,一个特定的 GoogleStreetView 记录可能指向多个 Street 记录,这没有任何意义.

但这看起来是唯一合适的解决方法。

EF 似乎不支持由 PK/FK 组合支持的 1 - 0..1 关联。

如果你问我是 Not Acceptable 。如果他们知道这是 EF 4.0 中的错误,为什么不在 4.1 中修复它???

编辑

上述解决方法也可以工作,但不满意在概念方面打破参照完整性。

所以我决定根本不映射这个实体,而是通过存储过程从数据库中获取它。

关于c# - Entity Framework 4.1 - TPT 预加载 - "The ResultType of the specified expression is not compatible with the required type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6171455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com