我试过如下:
删除了Migrations
文件夹中与模型相关的所有生成脚本。
删除了__MigrationHistory
表格中与模型相关的所有条目。
但是当我跑步时它会像这样产生:
PM> Add-Migration "Added_Investors_Table"
生成的迁移脚本
public partial class Added_Investors_Table : DbMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
模型
[Table("Investors")]
public class Investor : FullAuditedEntity
{
public virtual int AmountCommitted { get; set; }
public virtual decimal PercentageOfDeal { get; set; }
public virtual decimal AmountSpentToDate { get; set; }
}
DbContext.cs
public class IpDbContext : AbpZeroDbContext<Tenant, Role, User>
{
/* Define an IDbSet for each entity of the application */
public virtual IDbSet<Investor> Investors { get; set; }
public IpDbContext() : base("Default")
{
}
}
您知道为什么它不会像往常一样重新创建迁移脚本吗?除了上面提到的两个地方之外,我应该删除这个模型吗?
注意:上面提到的表是新的。我第一次成功创建了脚本。但是由于一些变化等等。我需要重新创建它。但它不起作用。但是,如果我更改现有模型,那么它会给出更改集脚本。很奇怪没有?我不知道问题出在哪里..
答案 0 :(得分:2)
我假设您不介意重新创建Investor
实体和相应的表格,但您不想修改任何其他内容。如果是这样,我认为你可以仔细,尝试以下方法:
Migrations
文件夹__MigrationHistoryTable
Investor
实体相关的DDL代码(例如,如果您要迁移以添加Investor
,则up
和{{1}对于该迁移,方法应为空)down
中删除Investor
实体及其配置,并使用DbContext
开关生成新的迁移。假设此迁移称为 RemoveInvestorMigration 。由于-IgnoreChanges
开关up
和down
方法
-IgnoreChanges
将 RemoveInvestorMigration 迁移应用到您的(开发)数据库。 现在EF认为你删除了Update-Database
实体(而且你做了某种方式) Investor
实体及其配置恢复为Investor
再次DbContext
实体的正确up
和down
方法。您必须在此处拥有一些Investor
代码,否则会出现问题诀窍是让EF相信,但你必须要小心,因为它会相信
顺便说一下,只要您需要它,就可以使用CreateTable
开关运行Update-Database
,这样EF就会显示生成的SQL代码,以便在应用迁移后更新数据库。这不会应用迁移(即它不会执行SQL代码)。这样,您可以看到EF在您选择应用迁移时会做什么