NHibernate LINQ包含的内容不起作用
我是NHibernate的新手,与FluentNhibernate合作完成一个新项目。我在执行一个非常简单的linq查询时遇到了一个奇怪的问题 查询1-效果非常好NHibernate LINQ包含的内容不起作用,linq,nhibernate,fluent-nhibernate,Linq,Nhibernate,Fluent Nhibernate,我是NHibernate的新手,与FluentNhibernate合作完成一个新项目。我在执行一个非常简单的linq查询时遇到了一个奇怪的问题 查询1-效果非常好 //Query 1 var customers = from customer in _session.Query<Customer>() where customer.FirstName == "john"
//Query 1
var customers = from customer in _session.Query<Customer>()
where customer.FirstName == "john"
select new
{
customer.FirstName,
customer.LastName
};
当执行下面的查询2时,我得到一个错误,无法执行查询
//Query 2.
var customers = from customer in _session.Query<Customer>()
where customer.FirstName.Contains("john")
select new
{
customer.FirstName,
customer.LastName
};
NH生成的查询是
选择customer0\u.FirstName作为col\u 0\u,选择customer0\u.LastName作为col\u 1\u 0\u
来自TBL客户0\u
其中customer0.FirstName类似“%”| |@p0 | |“%”@p0=‘约翰’
它生成了类似“%”| |@p0 | |“%”的名字,而不是我能理解的类似“%”+@p0+'%的名字
我使用的数据库是SQLServerCE,NHibernate版本是3.1.0
请帮助解决此问题。这是NH的dialent.cs文件基方言类中concat函数的定义:
RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", "||", ")"));
应该是哪一个
RegisterFunction("concat", new VarArgsSQLFunction(NHibernateUtil.String, "(", "+", ")"));
对于SQLCE。
所以您必须使用MSSQLSCE40方言类。
我认为它还没有在fluent NHibernate中注册,所以您可以这样定义它:
... MsSqlCeConfiguration.Standard
...
.Dialect<MsSqlCe40Dialect>();
然后您可以通过定义以下内容来使用它:
... MsSqlCeConfiguration.Standard.Dialect<TempSqlCeDialect>() ...
您使用的是什么版本的NHibernate?在您使用的SQL方言中,| |不可能是字符串连接的选项吗?你在使用什么数据库?查询是否确实失败?我使用的是NHibernate v 3.1.0我使用的是SQL Server embedded edition,但查询失败。已将方言更改为MSSQLSCE40方言,但仍不起作用。我必须等到那个bug被修复了吗?或者我已经编辑了我的上一篇文章来添加TempSqlCeDialect。它应该能解决问题。
... MsSqlCeConfiguration.Standard.Dialect<TempSqlCeDialect>() ...