EF自动迁移向后兼容

时间:2016-06-10 19:38:08

标签: c# asp.net-mvc entity-framework azure

我在Azure上运行了一个Jobs网站,我正在尝试使用 Azure的部署插槽,这些网站在使用相同的数据库时基本上总是运行2个(或者更多)网站不同版本的源代码,将其视为 Slot1 具有当前生产代码, Slot2 具有 vNext 代码。

我遇到的问题是,当 Slot2 中有迁移时,即使我们将其设置为不会影响兼容性, EF 也会抱怨数据库与模型的版本不同。

我读过这些问题:

但是在这两种情况下,他们都确保 EF 不会抱怨模型兼容性,因为它使用了一些变体 NOT CHECK 兼容性:

ALTER PROCEDURE [dbo].[ApruebaFecha](
    -- Add the parameters for the stored procedure here
    @LastDate   DATETIME,   -- Last Scheduled Date (Range Start)
    @Setting1   INT,        -- Length of Period
    @FechaHasta datetime,   -- End of Range
    @Result     DATETIME    OUTPUT)
AS
BEGIN

    /* Today */
    DECLARE
        @TodaysDate     DATETIME
        SELECT  @TodaysDate = CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE(), 101), 101)
        SELECT convert(datetime, CONVERT(varchar,@FechaHasta,101),101 )

    -- Finding today's date after resetting the time to midnight

    /* Schedule Date */
    DECLARE 
            @ScheduleDate   DATETIME

    -- Find the starting schedule date. If the schedule date is in a previous 
    -- month, adjust to the current month

    -- Adjust the days
        SELECT  @ScheduleDate   =   @LastDate
        WHILE   (@ScheduleDate  <   @TodaysDate AND @TodaysDate <@FechaHasta)
            SELECT  @ScheduleDate   =   DATEADD(day,    @Setting1,  @ScheduleDate)

        IF  (@ScheduleDate  =   @LastDate)
            SELECT  @ScheduleDate   =   DATEADD(day,    @Setting1,  @ScheduleDate)
            SELECT  @Result = @ScheduleDate

            WHILE(@Result <@FechaHasta)
            BEGIN
                IF(@Result <@FechaHasta)
                    SELECT  @Result =   DATEADD(day,    @Setting1,  @Result)
                    SET IDENTITY_INSERT [00TblFecha] ON 
                    INSERT INTO dbo.[00TblFecha](idFecha,jobno,fecha)VALUES('','',@Result)
                    SET IDENTITY_INSERT[00TblFecha] OFF 

                    print @Result
            end

END -- GetScheduleDate_Daily_PeriodicDay

但有些事情我不清楚:

  • 如果我更改模型兼容性检查并且没有自动运行迁移,那么如何迁移我的数据库?

  • 我可以使我的EF 6.13 + MVC 5检查模型兼容性并仅在它被破坏时警告我(比如我删除了一个列或类似的东西,而不是我添加了另一个列,我知道这可能很麻烦但是忍受我,并假设我有这类活动的计划)

1 个答案:

答案 0 :(得分:0)

如果我更改了模型兼容性检查并且没有自动运行迁移,那么如何迁移我的数据库?
我在这里给你一个很好的答案: Dis-Advantages of using EF 6.x.x Code First without Migration

我可以让我的DbContext检查模型兼容性并且只有在它被破坏时警告我(比如我删除了一个列或类似的东西,而不是我添加了另一个列,我知道这可能很麻烦但是请耐心等待我和假设我有这类活动的计划)

要做到这一点并不容易。问题是您必须动态解码模型并将其与MigrationHistory表的Model列进行比较。

此链接可能对您有意义:

https://romiller.com/2012/03/26/dynamically-building-a-model-with-code-first/

https://romiller.com/2013/02/05/extending-and-customizing-code-first-models-part-1/