1. ホーム
  2. c#

[解決済み] ASP.NETの追加マイグレーションで「composite primary key error」が発生した場合のfluent APIの使い方

2023-06-06 17:43:24

質問

こんにちは、私は Web アプリケーションを作成しているところです。 Microsoft.entityFrameworkCore Microsoft.entityFrameworkCore.Toolsを参照してください。 .

パッケージマネージャのコンソールで移行を追加する処理中に、次のようなエラーが発生しました。

" System.InvalidOperationException: Entity type 'Attends' has composite primary key defined with data annotations.Entityタイプ 'Attends' は、データアノテーションで定義された複合主キーを持ちます。複合主鍵を設定するには、流れるようなAPIを使用してください。 "です。

以下は、entityフォルダにある私のコードです。

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; }
    }
}

コンポジットキーを正しく設定するにはどのように調整すればよいですか?

どのように解決するのですか?

以下の通りです。 EFコア.

コンポジットキーは、Fluent API を使ってのみ設定することができます。 コンベンションを使用しても、コンポジットキーを設定することはできませんし、データ アノテーションを使用して設定することはできません。

以下は Fluent APIです。 のバージョンです。

注意 これはあくまで一例です。使用例に合わせて調整してください。

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

詳しくはこちらでどうぞ : 複合キー