1

Entity Framework の移行では、かなりの頻度で移行履歴を作成する必要があるようです (毎回ではなく、通常、新しいテーブルを作成する必要がある場合)。問題は、それが存在し、状態についていくことにかなり満足しているように見えることです。デフォルトではこれを行うべきではないと思います...?

私は、EF 4.3 で始まり、EF 5.0RC で少し更新され、現在は最終バージョン EF 5 になっているデータベースを持っています。

4.3 から 5.x への外部キー制約の命名規則に問題があったため、移行は : update-database -Script を使用して作成されます。

すなわち。これは最新の更新です:

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 ステートメントが消えます。以前の移行ファイルを頻繁にコメントアウトしているためでしょうか? 現時点では、データベースを再作成する/別のバージョンのデータベースをコピーする可能性がはるかに高いためです。

移行履歴テーブル - 現時点では、このテーブルには自動移行レコードのみがあります。

では、質問に戻ります。このテーブルが既に存在し、そこから状態を取得しているときに、Migration History テーブルを作成しようとしているのはなぜですか。

ありがとう、マット

4

0 に答える 0