【问题标题】:FromRawSql HasNoKey nullable bool conversionFromRawSql HasNoKey 可为空的布尔转换
【发布时间】:2022-06-12 02:43:02
【问题描述】:

我想以这种方式创建原始 sql 查询并将结果映射到 ViewModel 类:

这是视图模型类:

class MyViewModel
{
   public String field1 { get; set; }
   public bool? field2 { get; set; }
}

这是我在 dbcontext 类中放入的内容(在 OnModelCreating 函数中):

modelBuilder.Entity<MyViewModel>.HasNoKey();

这是我的查询:

   var query = db.Set< MyViewModel>(). FromRawSql("SELECT field1, null as field2 FROM MyTable");

我收到有关 field2 的错误,因为 EF 无法将 Null 转换为 field2。我不明白为什么,因为 field2 在 MyViewModel 中可以为空。

我也尝试输入 0 或 1。我有一个转换错误 Int32 vs bool。我怎样才能让它工作?

非常感谢

【问题讨论】:

  • 这应该可以正常工作,并且在 EF Core 6 中对我来说根本无法重现。

标签: entity-framework entity-framework-core


【解决方案1】:

T-SQL 中没有 bool 类型。而是使用Bit。只需从 SQL 查询中删除 field2

var query = db.Set< MyViewModel>(). FromRawSql("SELECT field1 FROM MyTable");

或者试试

class MyViewModel
{
   public string field1 { get; set; }
   public int? field2 { get; set; }
   public bool? field2b { get if (field2 != null) return Convert.ToBoolean(field2) 
  else return null;
   }
}

或者您可以使用案例,将其添加到您的 SQL 脚本中

CASE 
    WHEN column2 IS NULL 
        THEN CAST(NULL AS bit)
        ELSE column2 
END AS field2

我可以提供更多详细信息,因为我看不到您在查询什么表。

【讨论】:

  • 事实上我想计算这个 field2 列,结果是布尔值...有时我会强制 true/false/null。我该怎么做
  • 谢谢。没有办法在 sql 中做到这一点?
  • @Bob5421 你是什么意思?你想让我也创建一个 sql 脚本吗?只需使用 CASE 进行转换。或者显示你的表,我没有看到表就无法创建sql
  • 不,我只想知道如何在原始 sql 查询中进行转换,而不是在 viewmodel 类中。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 2018-01-24
  • 2011-12-26
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
相关资源
最近更新 更多