需要帮助为SQL Server CE数据库创建“另存为”方法

时间:2012-04-27 18:45:32

标签: c# sql entity-framework sql-server-ce

我有一个数据库,我很容易实现Save&加载方法但是在尝试使用C#创建Save As方法时遇到了一些麻烦。当我尝试以这种方式保存更改时,它不会创建新文件,它只是不执行任何操作,或者它覆盖了我的原始文件,即使我已经给它一个新名称。

总结一下,我想打开.sdf文件,对其进行一些更改,然后用新名称保存。我该怎么做?

我猜我正在尝试让它变得更容易 - 我对编程数据库相当新,所以任何提示都会受到赞赏。

谢谢!

这是我的另存为方法:

public static bool SaveDataAs(string fileName)
{
   thisdb.dbFileName = Path.GetFileName(fileName);
   thisdb.dbFilePath = Path.GetDirectoryName(fileName);

   thisdb.connect();
   thisdb.SaveChanges();

   return true;
}

这是我的连接方法:

public void connect()
{
   string dbConnection = "Data Source=" + dbFilePath + "\\" + dbFileName;

   if (!Directory.Exists(dbFilePath)) { 
      Directory.CreateDirectory(dbFilePath); 
   }

   string dbProvider = "System.Data.SqlServerCe.4.0";

   Database.DefaultConnectionFactory =
            new System.Data.Entity.Infrastructure.SqlCeConnectionFactory(
                                     dbProvider, dbFilePath, dbConnection);
}

1 个答案:

答案 0 :(得分:1)

您正在混合两个非常不同的职责:保存数据和文件管理。我会开始将两者分开。

让我们有一个管理数据库文件并了解其位置的组件。让另一个组件,即您的数据访问层(DAL),将数据保存到从文件管理器接收的数据库文件中。代码可能如下所示:

public Repository GetRepository(string fileName)
{
   var man = new DbFileManager();
   string dbFilePath = man.GetFile(fileName);

   return new Repository(dbFilePath); // TODO: Check dbFilePath
}

DbFileManager知道原始数据库文件,并负责将副本复制到所需位置。它返回一个与新文件通信的存储库。

存储库接收新位置的名称,构建连接字符串并使用它初始化上下文。然后,您可以在存储库中调用任意数量的读取和保存操作。

我不确定这是否符合您的要求。如果您还想修改原始文件,可以让文件管理器在完成更新后用副本覆盖它。这样,如果出现错误,将始终返回原始文件。