0

我正在开发一个具有二进制文件格式的 .NET (C#) 应用程序。计划是将二进制格式迁移到更易于维护的 SQLite 数据库文件。

我以前从未使用过这个,所以我有几个问题。

  1. http://sqlite.phxsoftware.com/的 SQLite 实现包含一个 LINQ 提供程序。我在本地玩过它,但我必须以某种方式将它合并到开发团队可以使用的东西中。我可以将我的 PC 上的数据库文件放在源存储库中包含的文件夹中,但最终它应该放在客户端 AppData 文件夹中。如何使用生成的数据库文件来实现这一点?当我手动创建数据库文件时,我可以很容易地告诉应用程序将它存储在哪里。

  2. 我对 SQL 查询有相当了解,所以我最初的计划是创建一个库,它使用 SQL 查询将 DataModel 移植到数据库。这样做的缺点是,当一个字段更改或添加时,我必须更新很多东西:数据库创建查询、数据库更新或更改查询、DataModel。根据我收集的信息,我可以使用设计器创建一个数据库,但是当我的应用程序下个月更新到版本 2 并且我的数据库发生更改时,我想将用户的现有数据库迁移到新版本。手动执行此操作我可以编写更新查询并使用某种增量数据库计数器来检查这一点,但是使用生成的数据库如何工作?

那么直接使用 SQL 查询是否更好、更容易、更安全,或者有人可以指出我使用生成的数据库的一个不错的可用用例吗?

谢谢。

4

3 回答 3

1

首先,首先System.Data.SQLite实现一个 ADO.NET Provider。您的连接字符串的数据源是您要操作的文件,但是如果您尝试从多个位置访问它,您将遇到 SQLite 问题。尽管与日记和锁定级别有关,但记录了一些解决方法。

要在用户的电脑上“创建”数据库,您可以在资源中存储一个空数据库并将其复制到该位置,或者打开一个新数据库并运行创建脚本来创建表/等。

其次,停止。如果您要超越 ADO.NET 的调用来抽象数据层,只需使用现有的 DB Abstraction,不要构建自己的。

我建议NHibernate,SQLite 也有驱动程序!

于 2010-11-17T00:57:05.863 回答
0

我不确定我是否理解问题1。您的程序是否需要获取预先生成的数据库文件并将其放入客户端的AppData文件夹中,或者您的程序是否需要在第一次运行时生成一个新的数据库文件在客户端计算机上,然后将新生成的数据库文件存储在 AppData 文件夹中。

至于第二个问题,我不明白你要做什么。您能否澄清和/或提供一个示例情况?

于 2010-11-17T01:04:00.453 回答
0

对于您的第一个问题,我可以建议您在 ASP.Net 中制作您的应用程序或使用 web 服务(第二个更适合您的目标)。对于网络服务,我认为您应该在调用这样的方法时编写会话:

...
[WebMethod]
public DataSet GetData(object id, string sessionId)
{
   try
   {
      DataSet ds = null;
      CUser user = Global.GetSession(sessionId);

      lock
      {
         //Your code to get data from the database
      }
      return ds;
   }
   catch(Exception ex)
   {
       throw;
   }
}

对于您的第二个问题,我建议使用 FluentNhibernate。我使用了 FluentNhibernate,并且很容易为您的数据库建模甚至生成它。这只是用于配置 SQLite 实现的代码的一瞥;

private static ISessionFactory CreateSessionFactory()
{
  return Fluently.Configure()
    .Database(
      SQLiteConfiguration.Standard
        .UsingFile("firstProject.db")
    )
    .Mappings(m =>
      m.FluentMappings.AddFromAssemblyOf<Program>())
    .ExposeConfiguration(BuildSchema)
    .BuildSessionFactory();
}

private static void BuildSchema(Configuration config)
{
  // delete the existing db on each run
  if (File.Exists(DbFile))
    File.Delete(DbFile);

  // this NHibernate tool takes a configuration (with mapping info in)
  // and exports a database schema from it
  new SchemaExport(config)
    .Create(false, true);
}

您可以查看FluentNhibernate wiki 页面,并且有该框架的介绍性实现。最后,为了管理您的 SQLite 数据库,我建议您使用SQLite Administrator

替代文字

于 2010-11-17T02:08:20.050 回答