我正在尝试创建一个可以处理多种数据库类型的应用程序。 到目前为止,我已经创建了我的界面。它非常简单,所有数据库都可以加载和保存配置文件
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
吗?这意味着它必须在具有返回类型的所有方法中完成,并且对于每个不同的数据库实现。或者有更好的方法吗?
希望这是有道理的。
答案 0 :(得分:2)
如果你使用Entity Framework,你可以使用你将使用的db类型的提供程序,但保持所有api和模型相同