2016-09-04 9 views
1

私は2つのテーブルカテゴリと製品を持っています。私はカテゴリテーブルにいくつかのデータを入力した後、選択したカテゴリに基づいていくつかの製品を追加したいと思います。製品を追加しようとすると、製品データは保存されません。私が持っているテーブルこれは私がなぜエンティティフレームワークコードが最初に1対多に正しく動作しない

public void write(string Name, string Code, decimal Price, 
        string Image, Category Category,string Description) 
    { 
     using (var x = new MyDB()) 
     { 
      Product pro = new Product 
      { 
       category = Category, 
       CategoryID=Category.ID, 
       PName = Name, 
       Code = Code, 
       Image = Image, 
       Description = Description, 
       Price = Price 
      };  
      var row = x.categorys.Find(Category.ID); 
      Category.product.Add(pro); 
      x.Entry(row).CurrentValues.SetValues(Category); 
      x.SaveChanges(); 





     } 
    } 

また、ここでは製品のテーブルに更新または追加行のために書いている関数である:私のDbContext

public class MyDB : DbContext 
{ 

    public MyDB() 
     : base("name=MyDB") 
    { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDB, coffeeshopapp.Migrations.Configuration>("MyDB")); 
    } 


    public virtual DbSet<Category> categorys { get; set; } 

    public virtual DbSet<Product> products { get; set; } 


    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 

    } 
} 
ここ

public class Product 
{ 
public Product() 
    { 
     this.order = new HashSet<Order>(); 
    } 
    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Int32 ID { get; set; } 
    public string PName { get; set; } 
    public string Code { get; set; } 
    public decimal Price { get; set; } 
    public string Image { get; set; } 
    public string Description { get; set; } 
    public Int32 CategoryID { get; set; } 
    [ForeignKey("CategoryID")] 
    public Category category { get; set; } 
    public virtual ICollection<Order> order { get; set; } 


} 
public class Category 
{ 
    public Category() 
    { 
     this.product = new HashSet<Product>(); 
    } 
    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Int32 ID { get; set; } 
    [Index(IsUnique =true)] 
    [Required, MaxLength(50), MinLength(1)] 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public string Image { get; set; } 
    public virtual ICollection<Product> product { get; set; } 
} 

としています

誰かがこの問題で私を助けてくれますか?ありがとう

答えて

0

まず、以下のようにモデルを修正する必要があります。

public class Product 
{ 

    public Product() 
    { 
     this.order = new HashSet<Order>(); 
    } 

    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Int32 ID { get; set; } 

    public string PName { get; set; } 
    public string Code { get; set; } 
    public decimal Price { get; set; } 
    public string Image { get; set; } 
    public string Description { get; set; } 

    [ForeignKey("CategoryID")] 
    public virtual Category Category { get; set; } 
    public Int32 CategoryID { get; set; } 

    public virtual ICollection<Order> Orders { get; set; } 


} 

public class Category 
{ 
    public Category() 
    { 
     this.product = new HashSet<Product>(); 
    } 

    [Key,DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Int32 ID { get; set; } 

    [Index(IsUnique =true)] 
    [Required, MaxLength(50), MinLength(1)] 
    public string Name { get; set; } 

    public string Description { get; set; } 
    public string Image { get; set; } 

    public virtual ICollection<Product> Products { get; set; } 
} 

この後、Saveのようになります。

public void write(string Name, string Code, decimal Price, 
        string Image, Category Category,string Description) 
    { 
     using (var x = new MyDB()) 
     { 
      Product pro = new Product 
      { 
       Category = Category, 
       PName = Name, 
       Code = Code, 
       Image = Image, 
       Description = Description, 
       Price = Price 
      };  

      x.Products.Add(pro); 
      x.SaveChanges(); 

     } 
    } 
+0

お返事ありがとうございました!しかし、私はあなたの変更に基づいてコードを実行したとき私はこれを持っています:EntityFramework.dllで 'System.InvalidOperationException'型の未処理の例外が発生しました 追加情報:エンティティオブジェクトは、IEntityChangeTrackerの複数のインスタンスによって参照することはできません。 –

+0

変更後にあなたの「保存」部分を私に見せてもらえますか? (VAR X =新mydbという()) { 製品プロ=新製品 { カテゴリー=カテゴリー、 PNAME =名前、 コード=コードを使用して – Sampath

+0

」、 画像=画像、 説明=説明、 価格= Price }; x.products.Add(pro); x.SaveChanges(); } ' –

関連する問題