我使用NVARCHAR
作为VARCHAR
列的LIKE
列的string.Contains()
列,从VARCHAR
创建的NHibernate 3.3.3对SQL Server的问题函数在LINQ表达式中。我有Fluent映射告诉NHibernate该列是VARCHAR
,并且是一个基本的" =="比较确实使用VARCHAR
参数。
Lambda string as VARCHAR列出了一个可能的答案,但经过大量打字(无法复制/粘贴到我的开发环境中)后,我无法随时随地获取此答案。
以下是存储CREATE TABLE Names (
Id INT NOT NULL IDENTITY (1, 1) PRIMARY KEY,
Name VARCHAR(20) NOT NULL
);
列的表格:
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();
以下是一些代码snipets来说明正在发生的事情:
DECLARE @p0 varchar(8000) = 'fred';
获取name1的调用将生成一个参数:
DECLARE @p0 nvarchar(8000) = N'fred';
获取name2的调用将生成一个参数:
{{1}}
有没有人想出一个有效的解决方案来让LINQ字符串函数调用将参数映射到正确的类型?
编辑:已确认NHibernate 4.0.0.GA版本中仍存在此相同的行为。
答案 0 :(得分:0)
我还没有准备好项目,所以我无法验证,但是请检查您是否可以指定
public void saveGifImage(Context context, byte[] bytes, String imgName ) {
FileOutputStream fos = null;
try {
File externalStoragePublicDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File customDownloadDirectory = new File(externalStoragePublicDirectory, "Merry_Christmas");
if (!customDownloadDirectory.exists()) {
boolean isFileMade = customDownloadDirectory.mkdirs();
}
if (customDownloadDirectory.exists()) {
File file = new File(customDownloadDirectory, imgName);
fos = new FileOutputStream(file);
fos.write(bytes);
fos.flush();
fos.close();
if (file != null) {
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, file.getName());
values.put(MediaStore.Images.Media.DISPLAY_NAME, file.getName());
values.put(MediaStore.Images.Media.DESCRIPTION, "");
values.put(MediaStore.Images.Media.MIME_TYPE, "image/gif");
values.put(MediaStore.Images.Media.DATE_ADDED, System.currentTimeMillis());
values.put(MediaStore.Images.Media.DATE_TAKEN, System.currentTimeMillis());
values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
ContentResolver contentResolver = context.getContentResolver();
contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Toast.makeText(context, "Image saved to " + file.getAbsolutePath(), Toast.LENGTH_SHORT).show();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
,如果可行