【发布时间】:2014-05-07 15:50:55
【问题描述】:
我有一个本地数据库,目前处于第二版,现在应该转到第三版。
之前迁移的代码是由另一个程序员生成的,所以我假设我在这里做错了。
在我的模型中大约有 30 个类,在模型文件夹内有一个映射文件夹,其中包含这 30 个类的映射。
所以现在我以与之前的类相同的方式添加了 1 个新类,然后在包管理器控制台中运行 add-migration 命令。
幸运的是,我得到了一个空的迁移 Up() 和 Down() 方法。
当我查看数据库时,有一个 __migrationHistory 可用于前 2 次迁移。如果我现在运行我的应用程序,还会添加第三次迁移,但显然没有创建新表,因为它不在 Up() 方法中。
我做错了什么?
我认为在为之前的迁移搭建脚手架时出了点问题......就像它找不到我添加的新 Code-First 类。
这是我的命令:
add-migration "1.2" -verbose -ProjectName "MyEFproject"
我假设脚手架不知道在哪里寻找新类...或者按照惯例,所有模型类都应该在项目中?
添加迁移的结果:
namespace MyProject.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class _1002 : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
}
新模型类示例:
using System;
using System.Collections.Generic;
namespace MyProject.Models
{
public partial class MyTable
{
public string SomeId { get; set; }
public string SomeText { get; set; }
}
}
新的映射类示例
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
namespace MyProject.Models.Mapping
{
public class MyTableMap : EntityTypeConfiguration<MyTable>
{
public MyTableMap()
{
// Primary Key
this.HasKey(t => t.SomeId);
// Properties
this.Property(t => t.SomeText)
.IsRequired()
.HasMaxLength(30);
// Table & Column Mappings
this.ToTable("MyTable", "database");
this.Property(t => t.SomeId).HasColumnName("SomeId");
this.Property(t => t.SomeText).HasColumnName("SomeText");
}
}
}
谢谢,
【问题讨论】:
-
MyTable是否在您的DbContext类中引用? -
不!我看到 DBContext 类隐藏在模型之间的某个地方.... :-) 这可能是问题所在。让我试试!!
-
重新启动 Visual Studio 帮助了我
标签: c# entity-framework database-migration