实体框架代码首先和数据库用户

时间:2011-06-05 19:30:38

标签: entity-framework-4.1 db-schema

我们遇到了将Web应用程序部署到另一个环境的小问题。 我们使用Entity Framework Code First方法创建了应用程序的数据库(db自动从模型创建)。 在此开发环境中,我们使用集成安全性,并在dbo用户下创建表。这些表就像是 的 [DBO] 即可。[myTable的]

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

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

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

有人能解释一下这个问题吗? Entity Framework从哪里获取此dbo前缀?

由于

3 个答案:

答案 0 :(得分:17)

明确指定架构:

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

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

答案 1 :(得分:1)

以流利的方式指定架构

protected override void OnModelCreating(DbModelBuilder modelBuilder)

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

答案 2 :(得分:0)

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

请点击此处查看更详细的说明:https://stackoverflow.com/a/14782001/243607