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:如何创建与供应商无关的数据集、表格适配器、绑定(DB 在运行时决定)(很好,但没有提供任何示例)

获取 DbProviderFactory

创建数据访问层 (C#)(非常好,但表适配器取决于供应商)

我想创建一个具有以下功能的 DAL:

  1. 使用类型化数据表(使用 Visual Studio Designer)
  2. 使用独立于供应商的数据适配器(手动创建)
  3. 不是 ORM

如何创建具有这些功能的简单 DAL?

4

2 回答 2

0

请参阅我的回答为任何数据库支持编写通用驱动程序类。除非您在编写自己的 DbAL 方面有非常特殊的需求,否则我建议您使用像DapperFluentDataSqlFu这样的微型 ORM 。易用性(在我看来)是这些结构的引人注目之处。

于 2013-01-18T23:36:57.077 回答
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 回答