支持多个数据库 - 从查询返回公共对象

本文关键字:查询 返回 公共对象 数据库 支持 | 更新日期: 2023-09-27 17:55:37

我正在尝试创建一个可以处理多种数据库类型的应用程序。到目前为止,我已经像这样创建了我的界面。它非常简单,数据库要做的就是加载并保存配置文件

public interface IDataManager
{
    Profile LoadProfile(int profileId);
    bool SaveProfile(Profile profile);
    bool CreateDatabase();
    bool OpenConnection();
    bool CloseConnection();
} 

让我们说上面的Profile类看起来像这样。

public class Profile 
{
   public int Id { get; set; }
   public string Name { get; set; }
}

我的问题是,使IDataManager的所有实现返回相同的对象类型的最佳方法是什么?

这是一个例子来说明我的意思。(这不是质量代码,它只是一个示例)

我创建了一个实现IDataManagerSQLite 类,然后创建一个实例。

public IDataManager DataManager = new SQLiteDataManager();

稍后在代码中,我想加载一个Profile所以我调用LoadProfile

Profile profile = DataManager.LoadProfile(1);

我的 LoadProfile 方法的 SQLite 实现如下所示

public Profile LoadProfile(int profileId)
{
        // Copied and pasted from a WinRT app
        using (var conn = new global::SQLite.Net.SQLiteConnection(new global::SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), _sqlpath))
        {
            var tmp = conn.Table<PROFILE>().First(x => x.ID == profileId);
        }
    // do something and return
}

现在如您所见,查询中的返回类型(tmp = type PROFILE)与LoadProfile方法返回类型(Profile)的类型不同。我必须将tmp转换为Profile吗?这意味着必须在所有具有返回类型的方法中以及每个不同的数据库实现中完成此操作。还是有更好的方法可以做到这一点?

希望这是有道理的。

支持多个数据库 - 从查询返回公共对象

如果使用实体框架,则可以只使用将使用的数据库类型的提供程序,但保持所有 API 和模型相同

各种数据库的实体框架提供程序列表