0

それぞれ移行が有効になっている、複数の EntityFramework コンテキストを含むプロジェクトがあります。を使用して完全な移行スクリプトを作成すると、Update-Database -SourceMigration $initialDatabase -scriptコンテキストごとにスクリプトが取得されます。

ただし、このスクリプトは次のようなもので始まります。

DECLARE @CurrentMigration [nvarchar](max)

IF object_id('[dbo].[__MigrationHistory]') IS NOT NULL
    SELECT @CurrentMigration =
        (SELECT TOP (1) 
        [Project1].[MigrationId] AS [MigrationId]
        FROM ( SELECT 
        [Extent1].[MigrationId] AS [MigrationId]
        FROM [dbo].[__MigrationHistory] AS [Extent1]
        WHERE [Extent1].[ContextKey] = N'Some.Configuration.Here'
        )  AS [Project1]
        ORDER BY [Project1].[MigrationId] DESC)

IF @CurrentMigration IS NULL
    SET @CurrentMigration = '0'

IF @CurrentMigration < '201506111916518_InitialCreate'
BEGIN
...

<migration code here>

...
END

ContextKey を使用して現在の移行を取得する方法に注意してください。見つからない場合は、最初の移行を行います。

最初の移行にはテーブルを作成するためのコードが含まれているため、事態は複雑になり__MigrationHistoryます。これは、最初のスクリプトを実行した時点で既に存在していることは明らかです。

これはエッジケースのバグですか、それともここで何か間違っていますか?

前もって感謝します

4

1 に答える 1

0

編集:申し訳ありませんが、複数のコンテキストに関する部分が表示されます。移行の場合、すべてのテーブルを含む単一の移行のみに使用される別のコンテキストを作成したい場合があります。Julie Lehrman には、境界付けられたコンテキストに関するいくつかの記事が役立つ可能性があります。

https://msdn.microsoft.com/en-us/magazine/dn948104.aspx

https://msdn.microsoft.com/en-us/magazine/jj883952.aspx?f=255&MSPPError=-2147217396


このコマンドは、最新の状態にするために必要なすべての移行を実行する冪等スクリプトを作成します。したがって、__MigrationHistory テーブルのない空のデータベースの場合、@CurrentMigration = '0' を設定し、テーブルを作成する最初の移行と他のすべての移行を実行します。データベースにさまざまな移行が存在する場合、ターゲット データベースに既に存在する最高の移行よりも少ない移行が実行されます。したがって、命名規則 (yyyyMMddHHmmss_xxxxx) です。

https://msdn.microsoft.com/en-us/data/jj591621.aspx?f=255&MSPPError=-2147217396#べき等を参照してください

于 2015-12-10T22:09:04.523 に答える