数据库驱动 windows 带有嵌入式数据库的桌面应用程序 Visual Studio 2015

Database driven windows desktop application with embedded database on Visual Studio 2015

  1. 我必须构建一个 Windows 存储数据并能够操作数据的桌面应用程序,但问题是,我无法决定使用哪个数据库?

  2. 我需要该应用程序是独立的,以便客户端 PC 上至少不需要安装其他软件(windows vista 到 10)。

  3. 我需要应用程序能够导出数据并且可能将数据库连接到云端。

  4. 我使用 C# 作为语言,使用 WPF 作为用户界面平台。

我读 this 问它几乎满足了我的要求。

但是由于 Sql Compact Edition 在 2013 年以后的 visual studio 版本中贬值,我不确定该使用什么。

我也阅读了 this 回答,它涵盖了与此相同的内容,但我不确定那是什么意思,如果我使用 Microsoft SQL 服务器,这是否意味着 作为数据库并在我的应用程序中嵌入 MS SQL Server Express(最新,仅限数据库)我不需要设置服务器明确地。

如果我确实遵循这种做法,在做出此选择之前我可能还需要考虑哪些其他事项。

需要说明的是,我正在使用 Visual Studio 2015 Community 并且我一直在使用 Service Based Database 创建一个 .mdf 文件,我喜欢这种方法,我问这个问题的主要重点是,如果我继续使用相同的方法(基于服务的数据库 ) 并在我的应用程序中嵌入 **MS SQL Server Express(仅限 ** 数据库),我可以接受上面的第 1、2、3、4 点吗?

请提供对此事的任何见解。

我不能在不知道有人做过并且有效的情况下做出决定。

确保您 future-proof 的一些提示:

  1. 不要直接从您的代码与数据库交互。设置合同(接口)并在单独的 DLL 中执行所有实现。如果您需要从本地数据库移动到云数据库,那么您可以简单地 re-implement 云数据库的相同接口,您的代码将像以前一样 运行

  2. 使用 (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}");
}

这让您可以非常自由地尝试大量可以满足您需要的不同数据库,您只需要更改配置以使用不同类型的数据库