2011-06-05 119 views
12

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

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

运行应用程序时,我们总是会遇到的问题
          无效的对象名称DBO。 myTable的”。

似乎代码仍在尝试寻找一个dbo表,它不存在,因此失败。

谁能解释一下这个问题吗?实体框架从哪里获取这个dbo前缀?

感谢

回答

17

显式地指定模式:

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

或指定默认的数据库架构为用户 - “DBO”

+0

指定架构和你将如何在流利做到这一点? (没有属性) – Ronald 2011-06-05 19:40:30

+0

Littlefool,重写OnModel创建你的数据库上下文类并在那里指定映射。这里是一个例子:http://weblogs.asp.net/scottgu/archive/2010/07/23/entity-framework-4-code-first-custom-database-schema-mapping.aspx – 2011-06-05 19:47:25

+0

我试过了。唯一的事情是,当我调试我看到代码永远不会在OnModelCreating方法。我的印象是它从一些缓存源获取模型。 – Ronald 2011-06-05 20:02:30

0

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

在这里看到更详细的解释:https://stackoverflow.com/a/14782001/243607

1

要流利

protected override void OnModelCreating(DbModelBuilder modelBuilder) 

modelBuilder.Entity<ClassName>().ToTable("TableName", "SchemaName"); 
+0

这将工作与SQL视图? – JQuery 2015-07-20 14:40:46

相关问题