我们遇到了将Web应用程序部署到另一个环境的小问题。 我们使用Entity Framework Code First方法创建了应用程序的数据库(db自动从模型创建)。 在此开发环境中,我们使用集成安全性,并在dbo用户下创建表。这些表就像是 的 [DBO] 即可。[myTable的]
对于我们的其他环境,我们正在为数据库使用用户名/密码身份验证。
我们编写了表格并在数据库上创建了它们。所以他们现在被命名为
的 [myDbUser] 即可。[myTable的]
运行应用程序时,我们总会遇到问题 无效的对象名称'dbo.myTable'。
似乎代码仍在尝试查找不存在的dbo表,因此失败。
有人能解释一下这个问题吗? Entity Framework从哪里获取此dbo前缀?
由于
答案 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