Bob*_*and 4 entity-framework entity-framework-4 ef-code-first
使用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; }
}
Run Code Online (Sandbox Code Playgroud)
而且我也尝试过使用相同内容的流畅变体:
modelBuilder.Entity<YourType>().ToTable("MyTable", "dbo");
Run Code Online (Sandbox Code Playgroud)
生成的脚本(和迁移)忽略了我尝试指定模式的事实.该脚本如下所示:
CREATE TABLE [MyTable] (
[Id] [int] NOT NULL IDENTITY,
[MyProp1] [nvarchar](max),
[MyProp2] [nvarchar](max),
CONSTRAINT [PK_MyTable] PRIMARY KEY ([Id])
)
Run Code Online (Sandbox Code Playgroud)
那里应该有一个[dbo]像这样:
CREATE TABLE [dbo].[MyTable] (
[Id] [int] NOT NULL IDENTITY,
[MyProp1] [nvarchar](max),
[MyProp2] [nvarchar](max),
CONSTRAINT [PK_MyTable] PRIMARY KEY ([Id])
)
Run Code Online (Sandbox Code Playgroud)
有没有其他人有幸让Entity Framework尊重架构?这种行为几乎完全破坏了我们在企业环境中使用codefirst的能力.
提醒:将用户更改为具有不同的默认架构根本不是一个选项.
由于我的评论似乎回答了窘境,我正在重新创建它作为答案.
似乎因为SQL Server提供程序使用"dbo"作为默认架构,所以即使您在配置中指定了它,也不会将"dbo"显式添加到创建表的TSQL中.
这回答了基本问题.但是现在我很好奇如果dbo是默认值,你(鲍勃)还有理由指定它吗?如果您只是希望默认对于阅读代码的人来说很明显,那么在配置中使用它并没有什么坏处.但这种行为会产生另一种副作用吗?
添加:啊哈!固定在EF5!:)(我刚刚更新了我的测试项目以使用EF5RC(针对.NET 4.0),我在TSQL for create table中显式获得了"dbo".)
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |