我正在尝试将我的应用程序部署到测试环境,但是无法使Entity Framework与数据库良好地配合使用。在开发中,我使用数据库初始化程序来为数据库添加种子,并且该程序工作正常。但是,当我将应用程序部署到实际的IIS实例时,无法使其与数据库接口。我的自定义初始化规则根本没有运行,所以我改为手动创建数据库。

我使用ObjectContext.CreateDatabaseScript()作为我的SQL脚本的起点,并且SSMS验证了在适当的表中是否填充了两行。

运行应用程序后出现我的问题。我有自定义的成员资格和角色提供程序,它们似乎都无法检测到数据库中存在这两个角色。

如何使我的实体框架识别这些行不是空的?我目前正在使用存储库中的私有DbContext来处理与Entity Framework的通信,并禁用了我的自定义初始化程序,直到此问题解决为止。

试图在数据库中查找角色的代码: 通用标签

数据库在“角色”表中显示以下内容: 通用标签

LINQ作为上下文生成一个空序列异常。角色为空。

有帮助吗?

解决方案 2

这是我从具有自定义IDatabaseInitializer实现的代码优先项目迁移的步骤,该实现在每个会话期间将数据库重置为非易失性数据库设置。

首先,在您的开发中复制由Entity Framework生成的架构。通过运行以下代码并将输出放置在可访问的位置(即:桌面上的文件,浏览器中的原始文本等)的项目中。 上下文是您的类的实例,该类继承自 DbContext 通用标签

第二,将从该调用返回的字符串保存在SQL文件中。确保删除创建实体框架元数据表的命令。该命令应类似于以下内容: 通用标签

接下来,删除植入数据库的代码。我使用了AppSetting,以便在部署后可以轻松切换该代码的用法,而无需重新编译和部署。 通用标签

紧接着该语句之外,您仍然需要初始化数据库,但是请确保传递 false ,以便仅在未初始化数据库的情况下进行初始化。 通用标签

最后,在一个空数据库上运行安装SQL,以使用适当的字段创建表。

如果部署然后运行您的应用程序,则该应用程序应该连接到数据库,并且能够正常处理您在外部脚本中加载的所有数据。我使用自定义成员资格和角色提供程序成功测试了此方法。

其他提示

从注释看来,实体框架与数据库之间没有任何联系。您没有提到正在使用哪个版本的Entity Framework,但我认为您已更新到最新版本(截至撰写本文时为4.3)。

我注意到您说您正在“手动创建数据库”。为什么不打开测试项目并根据您手动创建的数据库创建新的数据库优先模型?这至少应确认您可以在配置中使用实体框架。 从那里,我将从头开始创建另一个项目,以测试“代码优先”方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top