我必须构建一个存储数据并能够操作数据的Windows桌面应用程序,但问题是,我无法决定使用哪个数据库?
我需要将该应用程序设置为独立,以便在客户端PC上安装最少到没有其他软件(Windows Vista到10)。
我需要该应用程序才能导出数据,并可能将数据库连接到云端。
我使用C#作为语言,使用WPF作为用户界面平台。
我看了this问题,几乎涵盖了我的要求。
但是,由于 Sql Compact Edition 在2013年Visual Studio版本之后被折旧,我不知道该使用什么。
我还阅读this回答,它涵盖了相同的内容,但我不确定这是什么意思,这是否意味着我使用 Microsoft SQL Server 作为数据库并使用我的应用程序嵌入 MS SQL Server Express (最新的,仅限数据库)我不需要明确设置服务器。
如果我遵循这种做法,在做出这个选择之前我可能需要考虑的其他事情是什么。
要明确我使用 Visual Studio 2015社区并且我一直在使用基于服务的数据库来创建 .mdf 文件,我喜欢这种方法,我问这个问题的主要焦点是,如果我继续使用相同的方法(基于服务的数据库)并嵌入** MS SQL Server Express(**数据库)只有我的应用程序,我可以用上面的1,2,3,4点吗?
请提供有关此事的任何见解。
如果不知道有人做过而且有效,我就无法做出决定。
答案 0 :(得分:4)
一些提示,以确保您面向未来:
不要直接从代码与数据库交互。设置合同(接口)并在单独的DLL中执行所有实现。如果您需要从本地数据库迁移到云数据库,则可以简单地为云数据库重新实现相同的接口,并且您的代码将像以前一样运行
使用(1)中的方法,您基本上也可以完全自由地使用完全不同类型的数据存储,即那里的许多NoSQL数据库之一。
我通常会调用XXXRepository或XXXStore的数据库合约,例如:
public interface IProductStore
{
IEnumerable<Product> All { get; }
IEnumerable<Product> OutOfStock { get; }
Product GetById(Guid Id);
}
我可以在一个单独的DLL中实现此ProductStore契约,该DLL仅处理已在此处提及的SQLite或其他任何内容。然后,您可以使用工厂或IoC容器来执行接口和实现之间的映射:
var productsStore = DependencyResolver.Resolve<IProductStore>();
foreach(var product in productsStore.OutOfStock)
{
System.Console.WriteLine($"Need to refill: {product.Name}");
}
这使您可以非常自由地尝试大量可以满足您需求的不同数据库,并且您只需要更改配置以使用不同类型的数据库