目前我们正在用mvc5编写一个页面,其中一个oracle sql数据库与entitiy framework 6相连.
我们目前在oracle数据库中有两个模式,一个用于测试,另一个用于开发.权利框架中的模型是从开发数据库生成的,并与之完美地协同工作.
将连接字符串更改为测试模式时出现问题.更改连接字符串后,应用程序无法找到表(因为它们仍然引用开发方案).
目前我可以通过删除模型中的所有表,并从正确的模式重新创建模型,或手动编辑引用模式的每个文件来解决此问题.这两种解决方案都有点烦人且容易出错.
这种情况通常如何处理?
编辑
解决方法
通过Entity Framework代码中的流畅映射,您可以在运行时指示默认架构.这是在DbContext子类中的OnModelCreating中的一个语句,例如:
modelBuilder.HasDefaultSchema("dev");
您习惯于从数据库中重新生成模型,从中我得出结论,模型不包含许多(或任何)自定义,这些自定义将使模型生成成为艰苦的操作.这也应该使得移动到代码优先相对容易.所以我建议你这样做.
在Visual Studio中,您可以通过从Visual Studio的实体框架工具附带的模板添加“ADO.Net实体数据模型”,从现有数据库生成代码优先模型. (可能已预先安装).选择“数据库中的代码优先”选项并遵循指南.
如果这样做,您将在包含模型的项目中找到连接字符串.此连接字符串可以作为您将放入执行程序集的配置文件中的连接字符串的模板.你会注意到它看起来不像……
Metadata=res://* ... provider=System.Data.sqlClient;provider connection string="...""
这是属于数据库优先edmx模型的连接字符串.它包含元数据文件的路径,这些元数据文件作为资源生成到程序集中.相反,连接字符串将是一个简单的ADO.Net连接字符串.使用代码优先,EF将在运行时生成元数据.