servicestack - SS OrmLite : Ambiguous column name when joining and filtering on the column name

标签 servicestack ormlite-servicestack

我有两个表(代码优先),它们共享一个公共(public)列名“Status”,顺便在Where 子句中使用该列名。

这会导致列不明确错误。

var q = db.From<Process>()
.Where<Process>(p => Sql.In(p.Status, enProcessStatus.READY, enProcessStatus.ACTIVE))
.Join<Activity>()

db.SelectMulti<Process,Activity>(q);

当我使用 SelectMulti 时,常规 Select 也会出现该错误(仅用于调试目的)。

我发现是Where子句导致了问题,因为它过滤了两个表中具有相同名称的列。我尝试过使用Sql.In,但这没有帮助。

在 C# 内部,我所指的对象是明确的,编译器知道它是 Process,而不是 Activity,但是当涉及到 SQL 时,编译器知道它是 Process,而不是 Activity。它不再起作用了。

如何解决这个问题?

最佳答案

始终在查询开始时指定您的联接,即紧接着 From<T>() :

var q = db.From<Process>()
  .Join<Activity>()
  .Where<Process>(p => Sql.In(p.Status, enProcessStatus.READY));

var results = db.SelectMulti<Process,Activity>(q);

关于servicestack - SS OrmLite : Ambiguous column name when joining and filtering on the column name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69361869/

相关文章:

json - 使用 DeSerializeFn 在服务堆栈中自定义序列化

swift - Xcode 7 和 swift 2.0 的新服务堆栈客户端无法成功编译它生成的代码?

c# - ServiceStack Redis在检索数据时是如何发挥作用的

nunit - 使用 NUnit 对 ServiceStack.OrmLite 进行单元测试时,如何将 Db 注入(inject)服务类?

servicestack - 为命名连接配置 ConnectionFilter

c# - 我怎样才能在 ORMLite 中进行 self 加入

c# - ServiceStack 中是否有任何等效于 ValidateAntiForgeryToken 的东西?

c# - 如何使用 ServiceStack.net Web 服务在 AppHarbor 上配置 SSL

f# - ServiceStack.OrmLite 自动增量不适用于 F#

c# - ServiceStack.OrmLite : Reading back a TimeSpan using Untyped API results in InvalidCastException