【发布时间】:2020-10-08 07:55:46
【问题描述】:
您好,我正在尝试使用 EF6 代码优先方法。我了解迁移的基本概念以及 Code First 的工作原理,但不知何故这不起作用。我自己编写了以下迁移类,而不是通过 Add-Migration:
public override void Up()
{
CreateTable("dbo.Todo", column => new
{
Id = column.Int(nullable:false, identity:true),
Value = column.String(nullable: true),
CreatedAt = column.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()")
}).PrimaryKey(t => t.Id);
}
public override void Down()
{
DropTable("dbo.Todo");
}
但是up方法没有调用我的配置类如下:
internal sealed class Configuration : DbMigrationsConfiguration<DataProviderCodeFirst.Entities.TodoContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
ContextKey = nameof(TodoContext);
}
protected override void Seed(DataProviderCodeFirst.Entities.TodoContext context)
{
}
}
这是我的数据上下文:
public TodoContext(): base("SomeConnectionString")
{
}
public TodoContext(string connectionString)
: base(connectionString)
{
Database.CreateIfNotExists();
Database.SetInitializer(new MigrateDatabaseToLatestVersion<TodoContext, Configuration>());
Database.Initialize(false);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public virtual DbSet<Todo> Todos { get; set; }
我的实体类
public class Todo
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreatedAt { get; set; } = DateTime.Now;
public string Value { get; set; }
}
它创建数据库和表,键设置为标识,但 CreatedAt 未设置为计算,并且在调试中不调用 Up() 函数。
先谢谢了
【问题讨论】:
标签: c# sql-server entity-framework-6