【发布时间】:2012-05-21 14:51:16
【问题描述】:
使用 Entity Framework 4.3.1 CodeFirst 并且没有运气让迁移或脚本尊重我希望我的表最终所在的架构。
似乎默认行为(无论我做什么,我都会看到)是从实际运行的 SQL 中完全省略架构,导致在默认架构中为运行迁移的用户创建表,或者脚本。
我的 DBA 告诉我,他们无法更改我的默认架构,因为我是 AD 组的一部分而不是本地用户,因此更改运行用户的默认架构(通常推荐的解决方法)脚本根本不是一个选项。
我尝试过使用这样的注释:
[Table("MyTable", Schema = "dbo")]
public class MyTable
{
public int Id { get; set; }
public string MyProp1 { get; set; }
public string MyProp2 { get; set; }
}
我也尝试过使用同一事物的 fluent 变体:
modelBuilder.Entity<YourType>().ToTable("MyTable", "dbo");
生成的脚本(和迁移)忽略了我尝试指定架构的事实。脚本如下所示:
CREATE TABLE [MyTable] (
[Id] [int] NOT NULL IDENTITY,
[MyProp1] [nvarchar](max),
[MyProp2] [nvarchar](max),
CONSTRAINT [PK_MyTable] PRIMARY KEY ([Id])
)
当那里应该像这样藏在里面的 [dbo]:
CREATE TABLE [dbo].[MyTable] (
[Id] [int] NOT NULL IDENTITY,
[MyProp1] [nvarchar](max),
[MyProp2] [nvarchar](max),
CONSTRAINT [PK_MyTable] PRIMARY KEY ([Id])
)
有没有其他人幸运地让实体框架尊重架构?这种行为几乎扼杀了我们在企业环境中使用代码优先的能力。
提醒:将我的用户更改为具有不同的默认架构根本不是一种选择。
【问题讨论】:
-
奇数。看起来像 TSQL,因此对我来说像 SQL Server。那是对的吗?我已经做了很多,没有任何问题。从我的代码第一本书中: [Table("Locations", Schema="baga")] public class Destination 请记住对于 Visual Basic
-
(感觉不像是答案..)您尝试过“dbo”以外的其他方法吗?想知道是否因为“dbo”是 EF/SQL Server 的默认设置,SQL Server 提供程序不会费心显式添加它。
-
Julie - (是的,SQL Server)尝试使用“dbo”以外的东西,它创建并指定架构就好了!有趣的。问题是,我们想要我们的表在“dbo”中有趣的是它只是期望“dbo”
标签: entity-framework entity-framework-4 ef-code-first