EF6 使用列默认值创建代码优先表
Posted
技术标签:
【中文标题】EF6 使用列默认值创建代码优先表【英文标题】:EF6 Create Code First Table with column default value 【发布时间】:2021-05-30 19:42:46 【问题描述】:我使用 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
值的列对我来说很重要,解决方案是什么?
【问题讨论】:
***.com/questions/20136504/… 【参考方案1】:entity.Property(t => t.deleted)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
【讨论】:
【参考方案2】:您可以通过在生成的迁移代码中添加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");
只需在CreateTable
方法中为deleted
属性添加defaultValue
参数即可:
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, 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)
);
【讨论】:
以上是关于EF6 使用列默认值创建代码优先表的主要内容,如果未能解决你的问题,请参考以下文章