微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EF6 使用列默认值创建代码优先表

如何解决EF6 使用列默认值创建代码优先表

我使用 ASP.NET MVC 5 和 EF6,我使用代码优先的方法生成数据库

实体类

[Table("Simple")]
public class SimpleEntity
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    [Column("id")]
    public long Id { get; set; }

    [Column("name")]
    public string name { get; set; }

    [Column("deleted")]
    public bool deleted { get; set; }

    public SimpleEntity()
    {
    }
}

EntityTypeConfiguration 类:

public class SimpleEntityConfig : EntityTypeConfiguration<SimpleEntity>
{
    protected SimpleEntity()
    {
        HasKey(a => a.Id);
    }
}

我希望这个策略用这个查询生成一个表:

CREATE TABLE Simple 
(
    id int NOT NULL,name varchar(255) NOT NULL,deleted bit DEFAULT 'TRUE'
); 

对我来说重要的是在表中生成一个值为 DEFAULT 的列,解决方法是什么?

解决方法

> data$period<-rep(" ",length.out=nrow(data))
> data$period[which(data$datetime>sun$sunrise & data$datetime<sun$sunset)]<-"day"
> data$period[which(data$datetime>sun$sunset & data$datetime<sun$night)]<-"dusk"
> data$period[which(data$datetime>sun$nightEnd & data$datetime<sun$sunrise)]<-"dawn"
> data$period[which(data$period==" ")]<-"night"
,

您只需在生成的迁移代码中添加 defaultValue,即可创建具有默认值列的表。

创建 SimpleEntity 类后,运行 Add-Migration TestSimpleEntity 命令生成迁移代码。您将在 Up() 方法中获得以下代码:

 public partial class TestSimpleEntity : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.SimpleEntities",c => new
                    {
                        id = c.Long(nullable: false,identity: true),name = c.String(),deleted = c.Boolean(nullable: false),})
                .PrimaryKey(t => t.id);
            
        }
        
        public override void Down()
        {
            DropTable("dbo.SimpleEntities");
        }
}

只需在 defaultValue 属性的 CreateTable 方法中添加 deleted 参数:

public partial class TestSimpleEntity : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.SimpleEntities",deleted = c.Boolean(nullable: false,defaultValue: true),})
                .PrimaryKey(t => t.id);
            
        }
        
        public override void Down()
        {
            DropTable("dbo.SimpleEntities");
        }
}

之后,运行 update-database -verbose 命令,您将观察到 EF 将生成包含 Default 值的查询。

enter image description here

以下是服务器资源管理器中的表定义:

CREATE TABLE [dbo].[SimpleEntities] (
    [id]      BIGINT         IDENTITY (1,1) NOT NULL,[name]    NVARCHAR (MAX) NULL,[deleted] BIT            DEFAULT ((1)) NOT NULL,CONSTRAINT [PK_dbo.SimpleEntities] PRIMARY KEY CLUSTERED ([id] ASC)
);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。