2017-09-10 3 views
0

私は、データベースを更新したいが、私は「実行中のシードメソッド」EF 6.複数の追加エンティティが同じ主キーを持つことがあります。私は、Entity Frameworkの6</p> <p>を使用して、いくつかのC#プロジェクトに取り組んでいますエラー

Unable to determine the principal end of the 'CookerAPI.Models.Category_Recipe_Recipe' relationship. Multiple added entities may have the same primary key. 

後にこのエラーはここで種子法の一部だています

  context.Recipes.AddOrUpdate(x => x.Id_Recipe, 
       new Recipe() { Id_Recipe = 1, Id_User = 1, Id_Category_Main = 1, Name_Recipe = "zupa z kurek", Rate = 0, Level = "Łatwe", Date_Recipe = DateTime.Now, URL_Photo = "test", Time = 45, Number_Person = 4, Steps = 4, Instruction = "test" } 
       ); 


      context.Categories_Recipes.AddOrUpdate(x => x.Id_Category_Recipe, 
       new Category_Recipe() { Id_Category_Recipe = 1, Id_Recipe = 1, Id_Category = 1 } 
       ); 

Category_Recipeモデル:

public class Category_Recipe 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id_Category_Recipe{ get; set; } 

    public int Id_Category { get; set; } 

    public int Id_Recipe { get; set;} 

    [ForeignKey("Id_Category")] 
    public Category Category { get; set; } 
    [ForeignKey("Id_Recipe")] 
    public Recipe Recipe { get; set; } 

} 

レシピモデル:

public class Recipe 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int Id_Recipe { get; set; } 
     public int Id_User { get; set; } 
     public int Id_Category_Main { get; set; } 

     public string Name_Recipe { get; set; } 
     public int Rate { get; set; } //rate 0-5 
     public string Level { get; set; } 
     public DateTime Date_Recipe { get; set; } //date of create 
     public string URL_Photo { get; set; } //URL of thumbnail 
     public int Time { get; set; } // in minutes 
     public int Number_Person { get; set; } // recipe for number of people 
     public int Steps { get; set; } 
     public string Instruction { get; set; } 

     [ForeignKey("Id_User")] 
     public User User { get;set;} 
     [ForeignKey("Id_Category_Main")] 
     public Category_Main Category_Main { get; set; } 

     public ICollection<Category_Recipe> Categories_Recipes { get; set; } 
     public ICollection<Comment> Comments { get; set; } 
     public ICollection<Element> Elements { get; set; } 
     public ICollection<Rate> Rates { get; set; } 

    } 

問題はどこにありますか?どのように修正できますか?

+0

わかりません。しかし、あなたはあなたのモデルからCategory_Recipeを完全に排除するかもしれません。レシピにICollection 、カテゴリにICollection を宣言します。 EFはデータベースにリンクテーブルを作成しますが、モデルでリンクテーブルを参照する必要はありません。 –

+0

さて、多対多の関係(Category - Recipe = Category_Recipe)を作成したいと思います。これは良い解決策です。 しかし、私は別の多対多の関係(Recipe - Product = Element、Elementにもう一つの行を追加したいのですが、同じ問題を抱えています)を解決するにはどうすればいいですか? – Nedvid

+0

完全なreproなしではわかりません。 –

答えて

0

ソリューション:

context.Recipes.AddOrUpdate(x => x.Id_Recipe, 
       new Recipe() { Id_Recipe = 1, Id_User = 1, Id_Category_Main = 1, Name_Recipe = "zupa z kurek", Rate = 0, Level = "Łatwe", Date_Recipe = DateTime.Now, URL_Photo = "test", Time = 45, Number_Person = 4, Steps = 4, Instruction = "test" }); 

と交換してください:完全なREPROなし

context.Categories_Recipes.Add(new Category_Recipe() { Id_Recipe = 3, Id_Category = 3 }); 
    context.SaveChanges(); 
関連する問題