0

我首先对代码有一个奇怪的问题:

在项目中,我的实体看起来像这样,并且代码首先进行了很好的迁移。

public class MyEntity
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}

我决定在我的项目中添加一个像这样的界面

public interface IEntity
{
    Guid Id { get; set; }
    bool IsDeleted { get; set; }
}

我的新课程现在看起来像这样:

public class MyEntity : IEntity
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    bool IsDeleted { get; set; }
}

现在,如果我尝试使用 Code First 进行迁移,而不是在此处添加列,则首先执行代码:

  • 丢弃外键
  • 拖放索引
  • 尝试 CreateTable MyEntity 表并中断告诉我该表已存在

知道为什么代码首先尝试这样做吗?

4

1 回答 1

0

使用 EF5 我无法让它重现。通常,对于迁移,执行命令的顺序很重要,因为元数据在数据库和模型之间是一致的。

这些操作的正确顺序是:

a) 在填充数据库(即运行应用程序)之前运行 Enable-Migrations、Add-Migration 然后 Update-Database,然后在运行应用程序之前在每次模型更改后运行 Add-Migration 和更新数据库

b)运行应用程序,启用迁移,更改模型,添加迁移,更新数据库,再次确保在每次模型更改后运行更新数据库

另请注意,我使用的是一个非常简单的 DbContext,如下所示:

public class EntityContext : DbContext  
{
    public DbSet<MyEntity> MyEntities { get; set; }
}
于 2012-12-10T18:11:36.340 回答