如何在C#中使用策略模式设计数据访问类?

问题描述

我正在将策略设计模式应用于数据访问机制。 我有一个与技术无关的界面;

public interface IMyEntityDal
{
    MyEntity Get();
    bool Insert(MyEntity myEntity);
    void Delete();
}

我有2个具体的数据访问类,它们继承自IMyEntityDal接口。

public class sqlMyEntityDal : IMyEntityDal
{
    MyEntity Get()
    {
        //some ef or ado.net code...
    }

    bool Insert(MyEntity myEntity)
    {
        //this method is not usable for this concrete class.
    }
    
    void Delete(MyEntity myEntity)
    {
        //some ef or ado.net code...
    }
}
public class OracleMyEntityDal : IMyEntityDal
{
    MyEntity Get()
    {
        //this method is not usable for this concrete class.
    }

    bool Insert(MyEntity myEntity)
    {
        //some oracle specific code...
    }

    void Delete(MyEntity myEntity)
    {
        //some oracle specific code...
    }
}

使用IMyEntityDal的客户端不了解IMyEntityDal实现(sql或Oracle)。它使用构造函数注入具体的类。

public class Client
{
    private IMyEntityDal _myEntityDal;
    public Client(IMyEntityDal myEntityDal)
    {
        _myEntityDal = myEntityDal;
    }

    public void Do()
    {
        var myEntity = _myEntityDal.Get();
        _myEntityDal.Insert(myEntity);
    }
    
    public void DeleteMyEntity(MyEntity myEntity)
    {
        _myEntity.Delete(myEntity);
}

我想从sql获取MyEntity对象并插入到ORACLE数据库中。 我不想为Insert(MyEntity myEntity)具体类实现sqlMyEntityDal方法。而且我不想为Get()具体类实现OracleMyEntityDal方法。我也想为这两个类实现Delete(MyEntity myEntity)方法在这种情况下,我可以使用构造函数注入为Delete()方法选择具体的类。但是Client正在获取和插入同一数据库。 我该如何设计这种机制?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)