如何在数据库迁移期间获取实体框架以添加SQL约束?

时间:2017-06-29 16:26:26

标签: c# sql-server entity-framework constraints ef-migrations

首先我很抱歉这个问题太久了。我真的不知道哪些信息是相关的,所以我给了尽可能多的信息。

我有一个带有实体框架6(代码优先)的asp.net(.net框架4.5.2)MVC5应用程序我正在尝试进行一个相对简单的数据库迁移,其中我更改了一个列(称为SchedulkedWeeklyHours) int到十进制(decimal是C#中数据类型的名称)。我做了add-migration命令没问题但是当我尝试使用update-database命令时出现了这个错误:

The object 'DF__CompanyUs__Schde__43A1090D' is dependent on column 
'SchdeduledWeeklyHours'.
ALTER TABLE ALTER COLUMN SchdeduledWeeklyHours failed because one or more 
objects access this column. 

这是数据库迁移:

public override void Up()
    {
        AlterColumn("dbo.CompanyUsers", "SchdeduledWeeklyHours", c => 
        c.Decimal(nullable: false, precision: 18, scale: 2));
    }

    public override void Down()
    {
        AlterColumn("dbo.CompanyUsers", "SchdeduledWeeklyHours", c => 
        c.Int(nullable: false));
    }

更改了CompanyUser模型中的此字段:

    [Required]
    [Display(Name = "Scheduled Weekly Hours")]
    [Range(0, (7*24+1))]
    public int SchdeduledWeeklyHours { get; set; } = 40;

到此:

[Required]
[Display(Name = "Scheduled Weekly Hours")]
[Range(0.0, (7.0*24.0+1.0))]
public decimal SchdeduledWeeklyHours { get; set; } = 40.00M;

为了让update-database命令工作,我不得不手动删除约束,我做了然后命令工作正常。但是,由于我在两个alter column语句中都有相同的nullable:false键值对,因此在SQL中将新的不可为空的约束添加到该表中但是当我使用alt-F1检查约束时,我得到了在迁移之前跟随:

This is the DB constrants before the migration

The is the DB constraints after

我的问题是为什么一个新的不可空约束没有生成,即使我测试它时仍然不能将该字段保留为null(我尝试过)并且它仍然具有正确的默认值?我问的原因是,一个更高级的开发人员认为进入临时数据库并删除我在本地版本上执行的约束并不是一个好主意,因为它可能使恢复变得不可能。我该如何处理?

0 个答案:

没有答案