12

我们在将 Web 应用程序部署到另一个环境时遇到了一个小问题。我们使用实体框架代码优先方法(从模型自动创建的数据库)创建了应用程序的数据库。在这个开发环境中,我们使用集成安全性,并且表是在 dbo 用户下创建的。这些表就像
     [dbo] .[myTable]

对于我们的其他环境,我们使用数据库的用户名/密码身份验证。我们编写了表格并在数据库上创建了它们。所以它们现在被命名为
     [myDbUser] .[myTable]

运行应用程序时,我们总是会遇到
     Invalid object name 'dbo.myTable' 的问题。

似乎代码仍在尝试查找不存在的 dbo 表,因此失败。

任何人都可以阐明这个问题吗?Entity Framework 从哪里获得这个 dbo 前缀?

谢谢

4

3 回答 3

17

明确指定架构:

[Table("Users", Schema = "dbo")]
public class User { .. }

或为您的用户指定默认数据库架构 - 'dbo'

于 2011-06-05T19:33:01.787 回答
1

以流利的方式指定模式

protected override void OnModelCreating(DbModelBuilder modelBuilder)

modelBuilder.Entity<ClassName>().ToTable("TableName", "SchemaName");
于 2014-10-22T14:15:10.960 回答
0

我最近遇到了这个问题,并且我们支持具有相同模型的几种不同模式。我基本上想出的是将模式名称传递给映射模型的类/方法。例如,EntityTypeConfiguration子类将模式名称作为构造函数参数,并将其与硬编码字符串一起传递给ToTable().

有关更详细的说明,请参见此处:https ://stackoverflow.com/a/14782001/243607

于 2013-02-08T22:04:16.310 回答