У меня есть две таблицы категории и продукта. Я ввел некоторые данные в таблицу категорий, а затем я хочу добавить некоторый продукт на основе выбранной категории. Когда я пытаюсь добавить продукт, он не сохраняет данные о продукте. Это функция, которую я написал для обновления или добавления строки в таблице 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);
}
}
Может кто-нибудь помочь мне с этой проблемой? Спасибо
благодарит за ваш быстрый ответ! но когда я запустил код на основе вашей модификации, я получил следующее: Необработанное исключение типа «System.InvalidOperationException» произошло в EntityFramework.dll Дополнительная информация: Объект сущности не может ссылаться на несколько экземпляров IEntityChangeTracker. –
Можете ли вы показать мне свою 'экономную' часть после изменений? – Sampath
«, используя (вар х = новый MyDB()) { про продукт = Новый продукт { Категории = Категорию, PNAME = Имя, Code = Код, Image = изображение, Description = Описание, Цены = Цена }; x.products.Add (pro); x.SaveChanges(); } ' –