Dlinq对数据库支持上的一个缺陷
文章作者 100test 发表时间 2008:01:04 12:49:28
来源 100Test.Com百考试题网
这段时间在将MudCMS迁移到.net 3.5平台,发现Dlinq对数据库的支持上有一个很大的缺陷,从MSDN上查资料得知,Dlinq目前仅支持SQL2000与SQL2005,不能支持其它任何数据库,那怕是他们自家的Access数据库也不支持。这可是个大麻烦,我还想我的CMS支持ACCESS与MySQL呢。赶紧去System.Data.Linq.dll看看能不能自己写一个数据库适配器。反编译后,认为这种可能不存在。
通过反编译后发现,要想自己自己写一个数据库适配器,得实现以下两个接口,但微软都已经在这两个接口加了internal关键字。
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. } } |
目前网上关于Dlinq的例子在正式版下都不能正常运行。这是因为微软在正式版里已将 Table 类中的void Add(TEntity entity)、void Remove(TEntity entity)方法更名为 void InsertOnSubmit(TEntity entity)、void DeleteOnSubmit(TEntity entity)