use*_*243 50 c# entity-framework database-migration
我有一个当前的第二个版本的本地数据库,现在应该转到它的第三个版本.
以前迁移的代码是由另一个程序员生成的,所以我假设我在这里做错了.
在我的模型中有大约30个类,在模型文件夹中有一个映射文件夹,它包含这30个类的映射.
所以现在我以与之前的类相同的方式添加了1个新类,然后在包管理器控制台中运行add-migration命令.
幸运的是,我获得了一个空迁移Up()和Down()方法.
当我查看数据库时,有一个__migrationHistory可用于前两次迁移.如果我现在运行我的应用程序,也会添加第三个迁移,但显然没有创建新表,因为它不在Up()方法中.
我能做错什么?
我认为在搭建以前的迁移时会出现问题......就像它找不到我添加的新的Code-First类一样.
这是我的命令:
add-migration "1.2" -verbose -ProjectName "MyEFproject"
Run Code Online (Sandbox Code Playgroud)
我假设脚手架不知道在哪里寻找新类...或者按照惯例,所有模型类都只是在项目中?
添加迁移的结果:
namespace MyProject.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class _1002 : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
新模型类的示例:
using System;
using System.Collections.Generic;
namespace MyProject.Models
{
public partial class MyTable
{
public string SomeId { get; set; }
public string SomeText { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
新Mapping类的示例
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢,
Cod*_*gue 83
您需要将表添加到DbContext
类的实现中,例如
public class MyDatabaseEntities : DbContext {
public virtual DbSet<MyTable> MyTable { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*nak 15
我能够通过从_MigrationHistory表中删除上次迁移的记录来解决此问题.在将新模型对象的DbSet添加到DbContext类之前,此记录未正确创建.删除后,使用正确的Up()和Down()方法创建了新的迁移.
在将现有的EF Core Data Context回滚为空的同时,直到删除与迁移相关的,我的迁移才会生成ApplicationDbContextModelSnapshot
。
此类是自动生成的,需要与您当前的迁移级别保持一致。
我有这个问题,因为我忘记添加{get; 在我的变量名之后设置;}
您需要将表添加到 DbContext 类的实现中,例如,在将现有 EF Core 数据上下文回滚到空时,我的迁移不会生成,直到我删除伴随迁移的ApplicationDbContextModelSnapshot 。
就我而言,datacontext 项目是一个类库项目。它不同于启动项目,即 asp.net mvc 5 项目。现在错误地启动项目中的连接字符串指向不同的数据库。
所以确保datacontext项目和启动项目指向同一个数据库。还可以使用问题中提到的完整命令,如下所示。您也可以包括 -Force。
add-migration "InitialMigration" -verbose -ProjectName "MyEFproject" -Force
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27235 次 |
最近记录: |