Когда пользователь отправляет форму, данные должны идти в несколько таблиц со ссылочной целостностью.Некоторые данные представляют сущность и вызывают saveChanges () для получения идентификатора из этого вызова.Затем нам нужно сформировать другую сущность с возвращенным идентификатором (внешний ключ в этой таблице) и вставить строку.Это происходит в транзакции.
using (var context = new XyzContext())
{
var product = new ProductModel();
product.Description = "Test";
product.percentage = "20";
using (var transactionContext = context.Database.BeginTransaction())
{
context.Products.Add(product);
ObjectContext saveContext = (context as IObjectContextAdapter).ObjectContext;
int recordCount = saveContext.SaveChanges(SaveOptions.DetectChangesBeforeSave);
if (recordCount > 0)
{
this.ID = product.ID;
// Saving a audit record
SaveHistory(userId, product.ID, ref saveContext);
var size = new Container();
size.Product_Id = product.ID;
//size.Save(new List<string>() { "10", "20L", "30 Gallon" });
size.Save(context, new List<string>() { "10", "20L", "30 Gallon" });
}
transactionContext.Commit();
}
}
public void Save(XyzContext context, List<string> input)
//public void Save(List<string> input)
{
//using (var context = new Coda_Context())
//{
// Delete all the containers for this product_id
var products = context.Container.Where(p => p.Product_Id == this.Product_Id).ToList();
context.Product_Container.RemoveRange(products);
context.SaveChanges();
// Add the passed-in containers for this product_id
input.ForEach(i =>
{
var newSize = new ContainerModel()
{
Product_Id = this.Product_Id,
Container_Size_Id = i
};
context.Container.Add(newSize);
});
context.saveChanges();
// }
}
Я показал два подхода в коде выше.один комментируется.Следует вставить / обновить одну строку в таблице Product и несколько строк в таблице Container.Он вставляет несколько строк продукта одним подходом и в новом контексте выдает ошибку времени ожидания.
Пожалуйста, сообщите.