J'utilise EF Core 2.1
C'était ma définition initiale du modèle.
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; }
}
Mais j'ai réalisé que Id
& CustomerId
était à la fois une surcharge pour sa relation un-à-un, je peux mettre à jour ma définition de modèle BankAccount comme ci-dessous.
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; }
}
Alors que dans la classe DbContext défini l'entité principale comme ci-dessous.
HasOne(b => b.Customer).WithOne(c => c.BankAccount).HasForeignKey<BankAccount>(f => f.Id);
Lors de l'exécution de update-database
J'obtiens l'erreur ci-dessous.
System.InvalidOperationException: pour modifier la propriété IDENTITY d'une colonne, la colonne doit être supprimée et recréée.
Cependant, idéalement, je ne devrais pas mais simplement me débarrasser de cette erreur, j'ai supprimé la colonne, les contraintes et la table ainsi que la base de données complète. Mais toujours la même erreur.
J'ai rencontré le même problème et je l'ai résolu en deux étapes et deux migrations:
Cette erreur se produit lorsque vous essayez d'altérer ou de modifier une table qui existe déjà lorsque vous souhaitez modifier le schéma ou la table qui existe déjà, qu'EF core ne la prend pas encore en charge, elle nécessite une action manuelle. voici ce que vous pouvez faire à ce sujet:
J'ai rencontré ce problème lorsque j'ai essayé de changer un modèle de public byte Id {get; set;}
à public int Id {get; set;}
. Pour faire face au problème, j'ai fait les choses suivantes:
Remove-Migration -Project <target_project>
dans la console du gestionnaire de packagesModelSnapshot
et collez-les dans votre branche (écrasez-les soigneusement!) .add-migration <migration_name>
dans la console du gestionnaire de packagesupdate-database
dans la console du gestionnaire de packagesJe peux le résoudre de cette façon car mon code n'était pas dans un environnement de production. Vous devrez peut-être faire face à un autre problème complexe si le modèle est déjà là.
Je supprime le dossier Migrations et le _EFMigrationHistory
table générée automatiquement. Ran Add-Migration
MigrationName à nouveau sur Package Manager Console et Update-Database
commande, le problème est résolu.