又一个月没博了....今天博一下...
因为CHSNS的SQL Server布署有很多朋友反映很麻烦,所以正在将它迁移到Sqlite上,并做一些调整,使整个网站更加轻快
查询当然是linq比较好,但是寻找很久,网上却没有找到CodeSmith生成Sqlite的资料,只是在一些文章中提到要使用
Improved SQLite 3 Schema Provider
于是下载了一份,但是发现其中有几个问题
下载地址:http://community.codesmithtools.com/files/folders/schemaproviders/entry21748.aspx
以下一一解决:
1.工程引用的SchemaExplorer.dll版本过低,于是改为引用 \Program Files\CodeSmith\v4.1\AddIns\SchemaExplorer.dll
由此引发编译通不过,是因为IDbSchemaProvider接口有了更新,重新实现接口,会发现多了一个
SetExtendedProperties方法.
#region IDbSchemaProvider 成员
public void SetExtendedProperties(string connectionString, SchemaObjectBase schemaObject) {
throw new NotImplementedException();
}
#endregion
不用鸟它,因为Sql,mySql那些都是这样的.
2.编译后发现所有字段都是OBJECT....都打回原型了...
更改SchemaColumns.cs中的SQLiteDataTypes为
#region SQLiteDataTypes
public static class SQLiteDataTypes
{
public const string INTEGER = "integer";
public const string FLOAT = "float";
public const string REAL = "real";
public const string NUMERIC = "numeric";
public const string BOOLEAN = "boolean";
public const string TIME = "time";
public const string DATE = "date";
public const string TIMESTAMP = "timestamp";
public const string VARCHAR = "varchar";
public const string NVARCHAR = "nvarchar";
public const string TEXT = "text";
public const string NONE = "none";
public const string BLOB = "blob";
public const string CHAR = "char";
}
#endregion SQLiteDataTypes
然后将Sqlite3SchemaProvider.cs中的DbTypeFromType方法改为
private DbType DbTypeFromType (string p)
{
//SQLite has only a few types:
// INTEGER == Int64
// NUMERIC == Decimal
// TEXT == String
// NONE == Object or Blob
switch (p)
{
/*
case "System.Int64":
return DbType.Int64;
case "System.Decimal":
return DbType.Decimal;
case "System.String":
return DbType.String;
*/
case SQLiteDataTypes.INTEGER:
return DbType.Int64;
case SQLiteDataTypes.NUMERIC:
return DbType.Decimal;
case SQLiteDataTypes.FLOAT:
return DbType.Single;
case SQLiteDataTypes.REAL:
return DbType.Double;
case SQLiteDataTypes.TEXT:
case SQLiteDataTypes.VARCHAR:
case SQLiteDataTypes.NVARCHAR:
case SQLiteDataTypes.CHAR:
return DbType.String;
case SQLiteDataTypes.DATE:
case SQLiteDataTypes.TIME:
case SQLiteDataTypes.TIMESTAMP:
return DbType.DateTime;
default:
return DbType.Object;
}
}
OVER
将编译后的Sqlite3SchemaProvider.dll和System.Data.SQLite.dll复制到\Program Files\CodeSmith\v4.1\SchemaProviders
再用CodeSmith4 新建数据库连接时就会发现多了一个Sqlite的SchemaProvider
DLL下载... 吼吼...
http://www.cnblogs.com/Files/chsword/SchemaProviders.rar