Dlinq對(duì)數(shù)據(jù)庫(kù)支持上的一個(gè)缺陷

字號(hào):

這段時(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)