0

外部キー「Category」を「Products」テーブルにマッピングするための適切な構成を理解するのに最も苦労しています。モデルが生成されているとき (Code First)、この内部例外メッセージが表示されます。

{「'DataLayer.Product_Category' 関係のプリンシパル エンドを特定できません。追加された複数のエンティティが同じ主キーを持つ可能性があります。」}

私のPOCO製品クラス:

        public partial class Product
    {
        public Product()
        {
            this.Carts = new List<Cart>();
            this.OrderLines = new List<OrderLine>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public string Measure { get; set; }
        public decimal Price { get; set; }
        public int ScheduleId { get; set; }
        public int CategoryId { get; set; }
        public virtual ICollection<Cart> Carts { get; set; }
        public virtual Category Category { get; set; }
        public virtual ICollection<OrderLine> OrderLines { get; set; }
        public virtual Schedule Schedule { get; set; }

        public ObjectState ObjectState { get; set; }
    }

私のカテゴリ クラス POCO:

        public partial class Category
    {
        public Category()
        {
            this.Products = new List<Product>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Product> Products { get; set; }

        public ObjectState ObjectState { get; set; }
    }

製品の流暢な API:

  public class ProductMap : EntityTypeConfiguration<Product>
    {
        public ProductMap()
        {
            // Primary Key
            this.HasKey(x => x.Id);

            // Properties
            this.Property(x => x.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

            this.Property(x => x.Name)
                .IsRequired()
                .HasMaxLength(100);

            this.Property(x => x.Description)
                .IsRequired()
                .HasMaxLength(250);

            this.Property(x => x.Measure)
                .IsRequired()
                .HasMaxLength(30);

            // Table & Column Mappings
            this.ToTable("Products");
            this.Property(x => x.Id).HasColumnName("Id");
            this.Property(x => x.Name).HasColumnName("Name");
            this.Property(x => x.Description).HasColumnName("Description");
            this.Property(x => x.Measure).HasColumnName("Measure");
            this.Property(x => x.Price).HasColumnName("Price");
            this.Property(x => x.ScheduleId).HasColumnName("ScheduleId");
            this.Property(x => x.CategoryId).HasColumnName("CategoryId");

            // Relationships
            this.HasRequired(x => x.Category)
                .WithMany(x => x.Products)
                .HasForeignKey(d => d.CategoryId);
            this.HasRequired(x => x.Schedule)
                .WithMany(x => x.Products)
                .HasForeignKey(d => d.ScheduleId);

            this.Ignore(x => x.ObjectState);
        }
    }

カテゴリへの流暢な API:

public class CategoryMap : EntityTypeConfiguration<Category>
{
    public CategoryMap()
    {
        // Primary Key
        this.HasKey(x => x.Id);

        // Properties
        this.Property(x => x.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

        this.Property(x => x.Name)
            .IsRequired()
            .HasMaxLength(20);

        // Table & Column Mappings
        this.ToTable("Categories");
        this.Property(x => x.Id).HasColumnName("Id");
        this.Property(x => x.Name).HasColumnName("Name");

        this.Ignore(x => x.ObjectState);
    }
}

関係は次のとおりです: スケジュールは 1 対多対製品 カテゴリは 1 対多対製品

どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたの問題はここにあります:

this.Property(x => x.Id)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

に設定する必要がありDatabaseGeneratedOption.Identityます。

あなたの場合、同じIDを持つテーブルにレコードを追加します。

于 2013-04-16T06:54:49.417 に答える