我使用实体框架核心与ASP。. NET Core MVC建立我的网站和数据库之间的连接,使用代码优先的方法。在大多数情况下,它工作得很好。
但是我现在遇到了一个问题,似乎旧数据在某个地方缓存并用于新的迁移。即使我删除了整个迁移文件夹和数据库。我已经得到了不同的错误,由于这个,但一个例子是:
不能添加实体类型'ResourceField'的种子实体,因为没有为所需的属性'ResourceFieldDataLevel'提供值
,这是合理的。我的ResourceField
种子不包含ResourceFieldDataLevel
modelBuilder.Entity<ResourceField>().HasData(
new ResourceField { ResourceFieldId = 1, Level = 1,
VillageId = 1, TypeOfResource = ResourceFieldType.Clay },
但这是因为类ResourceField
根本不包含该值。
public class ResourceField
{
public ResourceField()
{
}
[Key]
public int ResourceFieldId { get; set; }
public ResourceFieldType TypeOfResource { get; set; }
public int VillageId { get; set; }
public virtual Village Village { get; set; }
public int Level { get; set; }
}
事实是,它做到了。我在测试不同的东西,添加/删除东西。所以在某一点上,有这样一个性质。似乎EF拒绝放弃旧的迁移。因此,继续使用那些已经不存在的东西。
我已经删除了整个迁移文件夹,也删除了数据库,所以它创建的一切都是全新的。
我得到错误后运行:
dotnet ef migrations add InitialCreate
类似的问题已经通过批量构建清理解决了。
我如何使实体框架核心忘记一切已经,只是从我有什么新的开始?我觉得这应该在您删除迁移和数据库时完成。
所以最后似乎是删除迁移和数据库(又一次)。然后注释掉OnModelCreating中包含种子数据的所有部分。
再次删除迁移和数据库。
未注释,它的代码完全相同