這段時(shí)間在將MudCMS遷移到.net 3.5平臺(tái),發(fā)現(xiàn)Dlinq對(duì)數(shù)據(jù)庫(kù)的支持上有一個(gè)很大的缺陷,從MSDN上查資料得知,Dlinq目前僅支持SQL2000與SQL2005,不能支持其它任何數(shù)據(jù)庫(kù),那怕是他們自家的Access數(shù)據(jù)庫(kù)也不支持。這可是個(gè)大麻煩,我還想我的CMS支持ACCESS與MySQL呢。趕緊去System.Data.Linq.dll看看能不能自己寫(xiě)一個(gè)數(shù)據(jù)庫(kù)適配器。反編譯后,認(rèn)為這種可能不存在。
通過(guò)反編譯后發(fā)現(xiàn),要想自己自己寫(xiě)一個(gè)數(shù)據(jù)庫(kù)適配器,得實(shí)現(xiàn)以下兩個(gè)接口,但微軟都已經(jīng)在這兩個(gè)接口加了internal關(guān)鍵字。
internal interface IReaderProvider : IProvider, IDisposable
{
IConnectionManager ConnectionManager { get; }
IDataServices Services { get; }
}
internal interface IProvider : IDisposable
{
void ClearConnection();
ICompiledQuery Compile(Expression query);
void CreateDatabase();
bool DatabaseExists();
void DeleteDatabase();
IExecuteResult Execute(Expression query);
DbCommand GetCommand(Expression query);
string GetQueryText(Expression query);
void Initialize(IDataServices dataServices, object connection);
IMultipleResults Translate(DbDataReader reader);
IEnumerable Translate(Type elementType, DbDataReader reader);
int CommandTimeout { get; set; }
DbConnection Connection { get; }
TextWriter Log { get; set; }
DbTransaction Transaction { get; set; }
}
目前網(wǎng)上關(guān)于Dlinq的例子在正式版下都不能正常運(yùn)行。這是因?yàn)槲④浽谡桨胬镆褜?Table 類中的void Add(TEntity entity)、void Remove(TEntity entity)方法更名為 void InsertOnSubmit(TEntity entity)、void DeleteOnSubmit(TEntity entity)
通過(guò)反編譯后發(fā)現(xiàn),要想自己自己寫(xiě)一個(gè)數(shù)據(jù)庫(kù)適配器,得實(shí)現(xiàn)以下兩個(gè)接口,但微軟都已經(jīng)在這兩個(gè)接口加了internal關(guān)鍵字。
internal interface IReaderProvider : IProvider, IDisposable
{
IConnectionManager ConnectionManager { get; }
IDataServices Services { get; }
}
internal interface IProvider : IDisposable
{
void ClearConnection();
ICompiledQuery Compile(Expression query);
void CreateDatabase();
bool DatabaseExists();
void DeleteDatabase();
IExecuteResult Execute(Expression query);
DbCommand GetCommand(Expression query);
string GetQueryText(Expression query);
void Initialize(IDataServices dataServices, object connection);
IMultipleResults Translate(DbDataReader reader);
IEnumerable Translate(Type elementType, DbDataReader reader);
int CommandTimeout { get; set; }
DbConnection Connection { get; }
TextWriter Log { get; set; }
DbTransaction Transaction { get; set; }
}
目前網(wǎng)上關(guān)于Dlinq的例子在正式版下都不能正常運(yùn)行。這是因?yàn)槲④浽谡桨胬镆褜?Table 類中的void Add(TEntity entity)、void Remove(TEntity entity)方法更名為 void InsertOnSubmit(TEntity entity)、void DeleteOnSubmit(TEntity entity)