Stu*_*est 9 c# linq sql-server nhibernate linq-to-nhibernate
我遇到了NHibernate 3.3.3针对SQL Server的问题,使用NVARCHAR作为参数来反对从LINQ表达式中的函数创建VARCHAR的LIKE查询的列string.Contains().我有Fluent映射告诉NHibernate该列是VARCHAR,并且基本的"=="比较确实使用了一个VARCHAR参数.
可能的答案在Lambda字符串中列为VARCHAR,但经过多次输入(无法复制/粘贴到我的开发环境中)后,我无法获得任何答案.
这是一个存储VARCHAR列的表:
CREATE TABLE Names (
Id INT NOT NULL IDENTITY (1, 1) PRIMARY KEY,
Name VARCHAR(20) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
以下是一些代码snipets来说明正在发生的事情:
public class Names
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
}
public class NamesMap : ClassMap<Names>
{
Table("Names");
Id(x => x.Id).Column("Id").GeneratedBy.Identity();
Map(x => x.Name).Column("Name").CustomType("AnsiString");
}
// _namesRepository is an IQueryable to the name collection
var matchName = "fred";
var name1 = _namesRepository.Where(o => o.Name == matchName).FirstOrDefault();
var name2 = _namesRepository.Where(o => o.Name.Contains(matchName)).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
获取name1的调用将生成一个参数:
DECLARE @p0 varchar(8000) = 'fred';
Run Code Online (Sandbox Code Playgroud)
获取name2的调用将生成一个参数:
DECLARE @p0 nvarchar(8000) = N'fred';
Run Code Online (Sandbox Code Playgroud)
有没有人想出一个有效的解决方案来使LINQ字符串函数调用将参数映射到正确的类型?
编辑:已确认NHibernate 4.0.0.GA版本中仍存在此相同的行为.
我还没有准备好项目,所以无法验证,但请检查您是否可以指定
Map(x => x.Name).Column("Name").SqlType("varchar(20)");如果它有效的话
| 归档时间: |
|
| 查看次数: |
696 次 |
| 最近记录: |