如何解决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
值的查询。
以下是服务器资源管理器中的表定义:
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 举报,一经查实,本站将立刻删除。