web-dev-qa-db-fra.com

ASP.NET add migration 'erreur de clé primaire composite' comment utiliser une API fluide

Bonjour, je suis en train de créer une application Web et j'ai déjà installé Microsoft Microsoft.entityFrameworkCore et . entityFrameworkCore.Tools .

Lors du processus d'exécution d'une migration complémentaire dans la console du gestionnaire de packages, un message d'erreur s'affiche.

"System.InvalidOperationException: le type d'entité 'Attends' a une clé primaire composite définie avec des annotations de données. Pour définir une clé primaire composite, utilisez une API fluide"

Voici mon code dans le dossier de l'entité.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Threading.Tasks;

namespace _3241_farmDb.Entities
{

    public class Farm
    {
        [Required, MaxLength(30)]
        [Key]
        public string FarmName { get; set; }
        [Required, MaxLength(15)]
        public string FarmCity { get; set; }
        [Required, MaxLength(9)]
        public string FarmerSSN { get; set; }
    }
    public class Farmer
    {
        [Required, MaxLength(9)]
        [Key]
        public int SS { get; set; }
        [Required, MaxLength(9)]
        public string Fname { get; set; }
        [Required, MaxLength(15)]
        public string Lname { get; set; }
        [Required, MaxLength(15)]
        public string CityName { get; set; }
        [Required, MaxLength(15)]
        public string Address { get; set; }
        [Required, MaxLength(30)]
        public string BoardPositionName { get; set; }
    }
    public class Child
    {
        [Required, MaxLength(9)]
        [Key]
        public int FarmerSS { get; set; }
        [Required, MaxLength(15)]
        [Key]
        public string Fname { get; set; }
        [Required, MaxLength(15)]
        [Key]
        public string Lname { get; set; }
        [Required]
        public int Age { get; set; }
    }
    public class Attends
    {

        [Key, Column(Order = 1)]
        public int FarmerSS { get; set; }
        [Key, Column(Order = 2)]
        public int HotelID { get; set; }
        [Required, MaxLength(15)]
        public string BoardPosition { get; set; }
    }

    public class Livestock
    {
        [Required, MaxLength(15)]
        public int LivestockID { get; set; }
        [Required, MaxLength(15)]
        public string LivestockType { get; set; }
    }
    public class Farm_Houses
    {
        [Required, MaxLength(15)]
        [Key]
        public int LivestockID { get; set; }
        [Required, MaxLength(15)]
        public string FarmName { get; set; }
    }
    public class Crops
    {
        [Required, MaxLength(15)]
        [Key]
        public int CropID { get; set; }
        [Required, MaxLength(15)]
        public string CropName { get; set; }
    }
}

Comment puis-je l'ajuster pour définir la clé composite correctement?

52
RyeGuy

Sur EF core ..

Les clés composites ne peuvent être configurées qu'à l'aide de l'API Fluent - les conventions ne configureront jamais une clé composite et vous ne pouvez pas utiliser les annotations de données pour en configurer une.

Voici la version de l'API Fluent :

Remarque: Ceci n'est qu'un exemple. Veuillez l'ajuster en fonction de votre cas d'utilisation.

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Attends>()
            .HasKey(c => new { c.FarmerSS, c. HotelID });
    }

Vous pouvez en savoir plus à ce sujet ici: clé composite

120
Sampath