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

时间:2016-07-06 19:34:00

标签: c# database

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

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的所有实现返回相同的对象类型的最佳方法是什么?

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

我创建一个实现SQLite的{​​{1}}类,然后创建一个实例。

IDataManager

稍后在代码中我想加载public IDataManager DataManager = new SQLiteDataManager(); ,因此我调用了Profile

LoadProfile

Profile profile = DataManager.LoadProfile(1); 方法的SQLite实现看起来像这样

LoadProfile

现在您可以看到查询(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吗?这意味着它必须在具有返回类型的所有方法中完成,并且对于每个不同的数据库实现。或者有更好的方法吗?

希望这是有道理的。

1 个答案:

答案 0 :(得分:2)

如果你使用Entity Framework,你可以使用你将使用的db类型的提供程序,但保持所有api和模型相同

A list of Entity Framework providers for various databases