我正在使用EF Core 2.1
这是我最初的模型定义。
public class Customer //Parent
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public BankAccount BankAccount { get; set; }
}
public class BankAccount
{
public int Id { get; set; }
public string Branch { get; set; }
public string AcntNumber { get; set; }
public DateTime CreatedDate { get; set; }
public int CustomerId { get; set; }
public Customer Customer { get; set; }
}
但我意识到Id
和CustomerId
都是开销的一对一关系,我可以更新我的BankAccount模型定义如下。
public class BankAccount
{
public int Id { get; set; }
public string Branch { get; set; }
public string AcntNumber { get; set; }
public DateTime CreatedDate { get; set; }
public Customer Customer { get; set; }
}
而在DbContext类中定义了主体实体,如下所示。
HasOne(b => b.Customer).WithOne(c => c.BankAccount).HasForeignKey<BankAccount>(f => f.Id);
在运行update-database
时,我收到以下错误。
System.InvalidOperationException:要更改列的IDENTITY属性,需要删除并重新创建列。
但是,理想情况下我不应该只是摆脱这个错误,我删除了列,约束以及表,然后是完整的数据库。但仍然是同样的错误。
当我试图将模型从public byte Id {get; set;}
更改为public int Id {get; set;}
时,我遇到了这个问题。为了解决这个问题,我做了以下事情:
Remove-Migration -Project <target_project>
创建目标模型ModelSnapshot
文件并将其粘贴到分支中(仔细覆盖它们!)。add-migration <migration_name>
在程序包管理器控制台中创建新的迁移update-database
更新数据库我可以用这种方式解决它,因为我的代码不在生产环境中。如果模型已经存在,也许你必须面对另一个复杂的问题。
当您尝试更改或修改当您想要更改架构或已存在的表时已存在的表时,会发生此错误,哪个EF核心不支持它,但它需要手动操作。这是你可以做的:
我删除了Migrations文件夹和自动生成的_EFMigrationHistory
。再次在Package Manager Console和Add-Migration
命令上运行Update-Database
MigrationName,问题得以解决。
我遇到了同样的问题,我通过两步和两次迁移解决了这个问题: