2016-09-04 1 views
1

У меня есть две таблицы категории и продукта. Я ввел некоторые данные в таблицу категорий, а затем я хочу добавить некоторый продукт на основе выбранной категории. Когда я пытаюсь добавить продукт, он не сохраняет данные о продукте. Это функция, которую я написал для обновления или добавления строки в таблице ProductПочему Entity Framework Code Сначала один для многих Не работает должным образом

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(); 





     } 
    } 

также здесь таблицы, которые у меня есть:

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

А вот мой 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); 

    } 
} 

Может кто-нибудь помочь мне с этой проблемой? Спасибо

ответ

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

благодарит за ваш быстрый ответ! но когда я запустил код на основе вашей модификации, я получил следующее: Необработанное исключение типа «System.InvalidOperationException» произошло в EntityFramework.dll Дополнительная информация: Объект сущности не может ссылаться на несколько экземпляров IEntityChangeTracker. –

+0

Можете ли вы показать мне свою 'экономную' часть после изменений? – Sampath

+0

«, используя (вар х = новый MyDB()) { про продукт = Новый продукт { Категории = Категорию, PNAME = Имя, Code = Код, Image = изображение, Description = Описание, Цены = Цена }; x.products.Add (pro); x.SaveChanges(); } ' –