2

現在、2 つのデータベース プロバイダーを含むプロジェクトがあります。

  1. SqlClient
  2. オレデブ

これらのプロバイダーを処理する DAL を作成する必要があります。私はこのようなインターフェースを作成することを考えていました:

public interface IDataAccessLayer
{
    public string GetSomeData();
}

そして、それを個別に実装します(単純ですが、これは間違った方法です)

public class SqlClientDal : IDataAccessLayer
{
    public string GetSomeData() { }
}

public class OleDbDal : IDataAccessLayer
{
    public string GetSomeData() { }
}

次のような投稿を読みました。

.Net: ベンダーに依存しないデータセット、Tableadapters、バインディング (DB は実行時に決定)の作成方法 (良い例ですが、例はありません)

DbProviderFactory の取得

データ アクセス レイヤー (C#) の作成(非常に優れていますが、テーブル アダプターはベンダーに依存します)

この機能を備えた DAL を作成したいと思います。

  1. 型指定されたデータ テーブルの使用 (ビジュアル スタジオ デザイナーを使用)
  2. ベンダーに依存しないデータ アダプターの使用 (手動で作成)
  3. ORMではない

これらの機能を備えた単純な DAL を作成するにはどうすればよいですか?

4

2 に答える 2

0

次のクラスからクラスを派生させることを検討してください。

System.Data.Common.DbConnection BaseConnection;
System.Data.Common.DbDataAdapter BaseAdapter;

namespace DAL
{
    public class DataAccess : DbConnection
    {
        protected override DbTransaction BeginDbTransaction(System.Data.IsolationLevel isolationLevel)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public override void ChangeDatabase(string databaseName)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public override void Close()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public override string ConnectionString
        {
            get
            {
                throw new Exception("The method or operation is not implemented.");
            }
            set
            {
                throw new Exception("The method or operation is not implemented.");
            }
        }

        protected override DbCommand CreateDbCommand()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public override string DataSource
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        public override string Database
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        public override void Open()
        {
            throw new Exception("The method or operation is not implemented.");
        }

        public override string ServerVersion
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }

        public override System.Data.ConnectionState State
        {
            get { throw new Exception("The method or operation is not implemented."); }
        }
    }
}

これらの関数とクラスのそれぞれをいじります。とても柔軟です。

于 2012-07-09T20:13:11.027 に答える
0

私の回答を参照してください。独自の DbAL を作成する必要がある場合を除き、DapperFluentDataSqlFuなどの Micro ORM を使用することをお勧めします。(私によると) 使いやすさは、これらの構造の魅力です。

于 2013-01-18T23:36:57.077 に答える