none
L'instruction MERGE est en conflit avec la contrainte FOREIGN KEY RRS feed

  • Question

  • Bonjour,

    Je génère ma base de données via Entity Framework Code First.
    Lors de la génération des tables et des données j'ai le message d'erreur suivant :

    "L'instruction MERGE est en conflit avec la contrainte FOREIGN KEY "FK_UserAccount_Order_GenderId". Le conflit s'est produit dans la base de données "FoodTruck", table "dbo.Order", column 'Id'."

    Les tables en question sont définies comme ceci:

      [Table("Gender")]
        public sealed class Gender : DescriptiveItem
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            [JsonIgnore]
            [Key]
            public int Id { get; set; }
            public Guid GUID { get; set; }
            [Required]
            public string CreatedBy { get; set; }
            [Required]
            public DateTime CreatedOn { get; set; }
            [Required]
            public string LastModifiedBy { get; set; }
            [Required]
            public DateTime LastModifiedOn { get; set; }
            [DefaultValue(false)]
            public bool IsDeleted { get; set; }
            [Required(ErrorMessage = "Veuillez indiquer une description")]
            public string Description { get; set; }
            public string ShortDescription { get; set; } 
        }

    La table USerAccount :

    [Table("UserAccount")]
        public class UserAccount
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            [JsonIgnore]
            [Key]
            public int Id { get; set; }
            public Guid GUID { get; set; }
            [Required]
            public string CreatedBy { get; set; }
            [Required]
            public DateTime CreatedOn { get; set; }
            [Required]
            public string LastModifiedBy { get; set; }
            [Required]
            public DateTime LastModifiedOn { get; set; }
            [DefaultValue(false)]
            public bool IsDeleted { get; set; }
            // Foreign Keys
            [ForeignKey(nameof(UserAccountType))]
            public int? UserAccountTypeId { get; set; } 
            [ForeignKey(nameof(Gender))]
            public int? GenderId { get; set; }
            
            [ForeignKey(nameof(Truck))]
            public int? TruckId { get; set; }
    
            // Properties
            [Required(ErrorMessage = "Veuillez indiquer un nom")]
            public string LastName { get; set; }
            [Required(ErrorMessage = "Veuillez indiquer un prénom")]
            public string FirstName { get; set; }
            [Required(ErrorMessage = "Veuillez indiquer un nom d'utilisateur")]
            public string UserName { get; set; }
            [Required(ErrorMessage = "Veuillez indiquer un mail valide")]
            [DataType(DataType.EmailAddress)]
            public string Mail { get; set; }
            public string Login { get; set; }
            [Required(ErrorMessage = "Veuillez indiquer un mot de passe valide")]
            [DataType(DataType.Password)]
            public string Password { get; set; }
    }


    Et la classe Order

     [Table("Order")]
        public class Order : BaseClass
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            [JsonIgnore]
            [Key]
            public int Id { get; set; }
            public Guid GUID { get; set; }
            [Required]
            public string CreatedBy { get; set; }
            [Required]
            public DateTime CreatedOn { get; set; }
            [Required]
            public string LastModifiedBy { get; set; }
            [Required]
            public DateTime LastModifiedOn { get; set; }
            [DefaultValue(false)]
            public bool IsDeleted { get; set; }
            [ForeignKey(nameof(UserAccount))]
            public int UserAccountId { get; set; }
            [ForeignKey(nameof(OrderStatus))]
            public int OrderStatusId { get; set; }
            [ForeignKey(nameof(Truck))]
            public int TruckId { get; set; }
            public DateTime DateIn{ get; set; }
            public DateTime DateOut { get; set; }
        }

    La table Order est pourtant bien créé ainsi que Gender et UserAccount.

    Je ne vois pas ce qui coince.

    Merci

    mercredi 13 octobre 2021 10:08

Réponses

  • Problème résolu, j'ai eu la très mauvaise idée de dupliquer une classe déjà existante. En modifiant son nom, VS a modifié tous les fichiers où elle apparaissait. Je croyais les avoir tous corrigé mais il en restait visiblement un. Ce qui a provoqué cette erreur.

    Conseil... ne pas dupliquer une classe existante. Même si on croit gagner du temps on en perd après pour retrouver les endroits où elle est référencée.

    Merci

    • Marqué comme réponse paintbox00 mercredi 13 octobre 2021 11:54
    mercredi 13 octobre 2021 11:54

Toutes les réponses

  • Problème résolu, j'ai eu la très mauvaise idée de dupliquer une classe déjà existante. En modifiant son nom, VS a modifié tous les fichiers où elle apparaissait. Je croyais les avoir tous corrigé mais il en restait visiblement un. Ce qui a provoqué cette erreur.

    Conseil... ne pas dupliquer une classe existante. Même si on croit gagner du temps on en perd après pour retrouver les endroits où elle est référencée.

    Merci

    • Marqué comme réponse paintbox00 mercredi 13 octobre 2021 11:54
    mercredi 13 octobre 2021 11:54
  • Bonjour,

    Merci d'avoir partagé la solution, cela peut aider quelqu'un.
    Bonne journée!

    Cordialement,
    Nina

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mercredi 13 octobre 2021 12:17
    Modérateur