1

实体框架迁移似乎想要在相当长的时间内创建迁移历史记录(不是每次,通常是在需要创建新表时)。问题在于它存在并且似乎很高兴跟上状态。我认为默认情况下它不应该这样做......?

我有一个从 EF 4.3 开始的数据库,用 EF 5.0RC 进行了一些更新,现在是最终版本 EF 5。

迁移是使用 : update-database -Script 创建的,因为从 4.3 到 5.x 的外键约束命名约定存在问题,所以我偶尔需要摆弄一些修改脚本。

IE。这是最新的更新:

ALTER TABLE [dbo].[PermissionRecords] DROP CONSTRAINT [FK_dbo.PermissionRecords_dbo.Roles_Role_Id]
ALTER TABLE [dbo].[PermissionRecords] DROP CONSTRAINT [FK_dbo.PermissionRecords_dbo.Roles_Role_Id1]
DROP INDEX [IX_Role_Id] ON [dbo].[PermissionRecords]
DROP INDEX [IX_Role_Id1] ON [dbo].[PermissionRecords]
CREATE TABLE [dbo].[RolesEffectivePermissions] (
    [Role_Id] [int] NOT NULL,
    [PermissionRecord_Id] [int] NOT NULL,
    CONSTRAINT [PK_dbo.RolesEffectivePermissions] PRIMARY KEY ([Role_Id], [PermissionRecord_Id])
)
CREATE TABLE [dbo].[RolesGivenPermissions] (
    [Role_Id] [int] NOT NULL,
    [PermissionRecord_Id] [int] NOT NULL,
    CONSTRAINT [PK_dbo.RolesGivenPermissions] PRIMARY KEY ([Role_Id], [PermissionRecord_Id])
)
CREATE INDEX [IX_Role_Id] ON [dbo].[RolesEffectivePermissions]([Role_Id])
CREATE INDEX [IX_PermissionRecord_Id] ON [dbo].[RolesEffectivePermissions]([PermissionRecord_Id])
CREATE INDEX [IX_Role_Id] ON [dbo].[RolesGivenPermissions]([Role_Id])
CREATE INDEX [IX_PermissionRecord_Id] ON [dbo].[RolesGivenPermissions]([PermissionRecord_Id])
DECLARE @var0 nvarchar(128)
SELECT @var0 = name
FROM sys.default_constraints
WHERE parent_object_id = object_id(N'dbo.PermissionRecords')
AND col_name(parent_object_id, parent_column_id) = 'Role_Id';
IF @var0 IS NOT NULL
    EXECUTE('ALTER TABLE [dbo].[PermissionRecords] DROP CONSTRAINT ' + @var0)
ALTER TABLE [dbo].[PermissionRecords] DROP COLUMN [Role_Id]
DECLARE @var1 nvarchar(128)
SELECT @var1 = name
FROM sys.default_constraints
WHERE parent_object_id = object_id(N'dbo.PermissionRecords')
AND col_name(parent_object_id, parent_column_id) = 'Role_Id1';
IF @var1 IS NOT NULL
    EXECUTE('ALTER TABLE [dbo].[PermissionRecords] DROP CONSTRAINT ' + @var1)
ALTER TABLE [dbo].[PermissionRecords] DROP COLUMN [Role_Id1]
ALTER TABLE [dbo].[RolesEffectivePermissions] ADD CONSTRAINT [FK_dbo.RolesEffectivePermissions_dbo.Roles_Role_Id] FOREIGN KEY ([Role_Id]) REFERENCES [dbo].[Roles] ([Id]) ON DELETE CASCADE
ALTER TABLE [dbo].[RolesEffectivePermissions] ADD CONSTRAINT [FK_dbo.RolesEffectivePermissions_dbo.PermissionRecords_PermissionRecord_Id] FOREIGN KEY ([PermissionRecord_Id]) REFERENCES [dbo].[PermissionRecords] ([Id]) ON DELETE CASCADE
ALTER TABLE [dbo].[RolesGivenPermissions] ADD CONSTRAINT [FK_dbo.RolesGivenPermissions_dbo.Roles_Role_Id] FOREIGN KEY ([Role_Id]) REFERENCES [dbo].[Roles] ([Id]) ON DELETE CASCADE
ALTER TABLE [dbo].[RolesGivenPermissions] ADD CONSTRAINT [FK_dbo.RolesGivenPermissions_dbo.PermissionRecords_PermissionRecord_Id] FOREIGN KEY ([PermissionRecord_Id]) REFERENCES [dbo].[PermissionRecords] ([Id]) ON DELETE CASCADE
CREATE TABLE [dbo].[__MigrationHistory] (
    [MigrationId] [nvarchar](255) NOT NULL,
    [Model] [varbinary](max) NOT NULL,
    [ProductVersion] [nvarchar](32) NOT NULL,
    CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY ([MigrationId])
)
BEGIN TRY
    EXEC sp_MS_marksystemobject 'dbo.__MigrationHistory'
END TRY
BEGIN CATCH
END CATCH
INSERT INTO [__MigrationHistory] ([MigrationId], [Model], [ProductVersion]) VALUES ('201209050951363_AutomaticMigration', 0x1F8B0800000000000400ED7DDB721C ..., '5.0.0.net40')

如果我将迁移文件添加到项目中,create table 语句就会消失。难道是因为我经常注释掉以前的迁移文件?因为我现在更有可能重新创建数据库/复制不同版本的数据库。

迁移历史表 - 目前该表中只有自动迁移记录。

所以回到这个问题。为什么它正在尝试创建迁移历史表,而该表已经存在并从中获得了状态。

谢谢,马特

4

0 回答 0