【发布时间】:2015-08-27 06:23:47
【问题描述】:
我已将我的 entity 6.0 项目从 SQL Server 迁移到 PostGreSQL。使用 SQL Server,对我的查询进行的这种转换通常可以正常工作
Module.cs
return (
from m in objDB.Modules
orderby m.ID
select new
{
ID = m.ID,
Name = m.Name,
Status = DB_Function.Convert.ToInt32( m.Status )
}
);
PS:状态是布尔类型
DB_Function.cs
[System.Data.Entity.DbFunctionAttribute( "Business.Database", "ToInt32" )]
public static Int32 ToInt32( Boolean Val )
{
return System.Convert.ToInt32( Val );
}
但是,当我迁移到 PostgreSQL(并因此更改了我的 EDMX)时,这些类型的转换不再执行:
类型上的指定方法'Int32 ToInt32(Boolean)' 'DB_Function+Convert' 无法转换为 LINQ to Entities 存储表达式。
此错误与 PostGre 相关(如 int4 而不是 int32)或者我遗漏了什么?
提前致谢。
【问题讨论】:
-
不是您问题的答案,但是如果
Status是布尔值,您为什么要转换为Int32? -
因为我需要它与0和1。在SQL Server中,没有boolean类型,只有bit,所以这个转换只是为了bit值变成int32。虽然在 PostGre 中有一个 boolean 类型,但所有代码都被编程为使用 0 或 1,所以我尽量不要大幅修改它。
-
你能把方法改成
return Val ? 1 : 0;吗? -
我尝试了这个,但仍然返回相同的错误消息。现在我有更多疑问,我认为您的解决方案会像手套一样适合。也许问题出在方法的调用上。无论如何,谢谢。编辑:我已经修改了 linq 本身并且可以工作。非常感谢
-
不要改变主题,但如果你在 Sql Server 中使用了位字段,它会通过将它映射到实体框架中的布尔值。而且您拥有的功能应该可以工作(我认为,从未将 postgres 与 EF 一起使用)IF postgres 有一个名为“ToInt32”的功能。你没有在数据库中创建那个函数吗?
标签: c# linq entity-framework postgresql