我做了一些搜索,但在使用OrmLite时找不到很多。我认为这是可能的,但我不知道该朝哪个方向走。
理想情况下,我希望能够基于带有二进制字段的模型创建或删除/创建一个表,然后在数据库中将该列映射到filestream。我知道必须提前在sql服务器上安装filestream (我不认为您可以在Management / Configuration之外完成所有filestream设置)
是否有一种使用OrmLite来实现此操作的方法?我确实找到了这部分:
db.ExecuteNonQuery("UPDATE LastName=@name Id=@id",new { name = "WaterHouse",id =7 });
和:
创建表Archive.dbo.Records ( Id ROWGUIDCOL NOT NULL唯一,SerialNumber整数唯一,图表VARBINARY(最大) FILESTREAM NULL ) GO
ALTER可能会工作,但我不知道如何结合使用OrmLite或Ormlite中的SQL单独修改一个列。
发布于 2013-12-13 16:09:44
这在OrmLite中是不太可能的,但是您可以编写一个扩展方法,它使用OrmLite基来做您想做的事情(下面的代码是v3)。此方法只需删除所有var二元列并将它们作为filestreams重新添加:
public static class OrmLiteBinaryCreateExtensions
{
/// <summary>
/// WARNING: this will drop all of the existing varbinary columns!
/// </summary>
public static void UpdateByteToBinary<T>(this IDbConnection dbConn)
{
var modelDef = ModelDefinition<T>.Definition;
var tableName = OrmLiteConfig.DialectProvider.GetQuotedTableName(modelDef);
var definitions = modelDef.FieldDefinitions.Where<FieldDefinition>(f => f.FieldType == typeof(byte[]));
foreach (var def in definitions)
{
var columnName = OrmLiteConfig.DialectProvider.GetQuotedColumnName(def.FieldName);
dbConn.ExecuteNonQuery(string.Format("ALTER TABLE {0} DROP COLUMN {1}", tableName, columnName));
dbConn.ExecuteNonQuery(string.Format("ALTER TABLE {0} ADD {1} [varbinary](max) filestream NULL", tableName, columnName));
}
}
}用法:
using (IDbConnection db = dbFactory.OpenDbConnection())
{
// create temp file, read bytes, delete it
var tmp = Path.GetTempFileName();
using (var fs = new FileStream(tmp, FileMode.OpenOrCreate))
{
var textBytes = System.Text.Encoding.UTF8.GetBytes("some text");
fs.Write(textBytes, 0, textBytes.Length);
}
byte[] bytes = File.ReadAllBytes(tmp);
File.Delete(tmp);
// stand up data in orm lite
db.CreateTableIfNotExists<FileExample>();
// here is our extension method - note that this will drop the entire file column
// and lose all existing data
db.UpdateByteToBinary<FileExample>();
db.Insert<FileExample>(new FileExample { Name = "my new file", FileBytes = bytes });
// read data back to ensure it saved properly
var files = db.Select<FileExample>();
using (var ms = new MemoryStream(files[0].FileBytes))
{
var someText = System.Text.Encoding.UTF8.GetString(files[0].FileBytes);
Console.WriteLine(someText);
}
db.DropTable<FileExample>();
}https://stackoverflow.com/questions/20535267
复制相似问题