0

我有一个带有 SQLLocalDB 数据库的 ac# .NET 应用程序。我首先使用数据库来创建 EF6 模型。我已经使用 SQL Server Management Studio 将列添加到其中一个表中,然后使用“从数据库更新模型”将更改传播到我的模型中。执行此操作时,开发 PC 上的数据不受影响并包含新列。但是,当其他用户运行新版本的应用程序时,他们现有的数据文件 (.mdf) 将无法识别新列并崩溃,但以下情况除外:

System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Invalid column name 'VAT_long_description'

使用户在该表中的现有数据无法访问。我很欣赏 Code First 提供了迁移数据的能力,但是在首先使用数据库构建 EF 模型时,此功能似乎不可用。

我的连接字符串是:

<add name="PMMEntities" connectionString="metadata=res://*/PMMData.csdl|res://*/PMMData.ssdl|res://*/PMMData.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\v11.0; AttachDBFilename=|DataDirectory|\PMM.mdf; initial catalog=PMM;Integrated security=True;MultipleActiveResultSets=True; App=EntityFramework&quot;"providerName="System.Data.EntityClient" />

我想确保当用户安装新版本时,他们的 .mdf 数据文件将适应新的数据库模式而不会丢失数据。如果应用程序抛出“Invalid column name”SQL 异常,似乎唯一的方法是在启动时运行转换或迁移方法。我在哪里可以找到执行此操作的代码(或 NuGet 包)?

4

1 回答 1

0

如果您使用的是 MVC ,则有两种方法可以在模型类数据库中进行更新。解决该问题的最简单方法是删除与数据库相关的模型类,然后将其再次导入模型文件夹。不用担心数据,它们仍然会存储在您的数据库中。除非您在模型类数据库中编写了一些额外的对象,否则在这种情况下您将浪费这些额外的对象.. 它不会影响您的存储。

于 2019-10-22T15:38:53.590 回答