数据库驱动的Windows桌面应用程序,在Visual Studio 2015上嵌入了数据库

时间:2016-01-19 09:42:52

标签: c# sql-server wpf embedded-database visual-studio-2015

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

  2. 我需要将该应用程序设置为独立,以便在客户端PC上安装最少到没有其他软件(Windows Vista到10)。

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

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

  5. 我看了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点吗?

    请提供有关此事的任何见解。

    如果不知道有人做过而且有效,我就无法做出决定。

1 个答案:

答案 0 :(得分:4)

一些提示,以确保您面向未来:

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

  2. 使用(1)中的方法,您基本上也可以完全自由地使用完全不同类型的数据存储,即那里的许多NoSQL数据库之一。

  3. 我通常会调用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}");
    }
    

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