使用db-migration确定数据库中字段的值范围

时间:2014-10-21 17:48:33

标签: database entity-framework entity-framework-6 database-migration

我已经使用了Entity Framework 6.x,并且我已经通过代码优先方法生成了我的数据库。 在创建db之后,我决定对我的数据库进行一些更改。例如,我想确定模型中Size属性的值范围。

我的模特:

public class Tag : Entity, ITag
{
    /// <summary>
    /// Size can be 1, 2, 3 or 4
    /// </summary>
    [Range(1, 4)]
    public virtual int Size { get; set; }

    [Required]
    [StringLength(25)]
    public virtual string Title { get; set; }

    [StringLength(256)]
    public virtual string Description { get; set; }

    public virtual bool IsActive { get; set; }

    public virtual ISet<ArticleTag> ArticleTags { get; set; }

    public virtual ISet<ProjectTag> ProjectTags { get; set; }
}

迁移:

namespace Jahan.Blog.Web.Mvc.Migrations
{
    using System;
    using System.Data.Entity.Migrations;

    public partial class Initial : DbMigration
    {
       public override void Up()
       {
           // I want to write some code like this that can provide rage of data. 1 to 4:
           //AlterColumn("dbo.Tag", "Size", c => c.Int(nullable: false,defaultValue:1));
           //... but I don't know how can I do it.
       }

       public override void Down()
       {
       }
    }
}

1 个答案:

答案 0 :(得分:1)

实体框架使用范围注释来指示如何在保存之前验证数据,并通过MVC生成客户端验证。如果您还希望向数据库添加检查约束,则可以在向上迁移中执行此操作:

    public override void Up()
    {
        //Sql to add a check constraint using Sql Server syntax:
        Sql(@"ALTER Table dbo.Tags 
        ADD CONSTRAINT chk_Size 
        CHECK (Size IN (1, 2, 3, 4))");
    }