проблем (см AbandonOrderTest3 в коде ниже):Entity дважды добавляются в базу данных
объект клиента и объект заказа является до обновленными.
Заказчик указан как собственность для заказа.
Заказ прилагается к контексту, однако SaveChanges не вызывается.
Контекст расположен.
Объект заказа обновляется снова, а объект клиента устанавливается как свойство.
Создан новый контекст и добавлен заказ. Вызывается SaveChanges.
Заказ добавляется дважды в базу данных (это проблема, она должна быть добавлена один раз).
.Net версии: 4.5, версия EF: 6.1.3
public void AbandonOrderTest1()
{
// Works as expected
Customer c1 = new Customer { Name = "C1", ID = 9 }; // Customer with this ID already exists
Order order = new Order { Customer = c1, CustomerID = c1.ID };
using (Repository.db db = new Repository.db(_connectionString))
{
db.Orders.Add(order);
db.Entry(order.Customer).State = EntityState.Detached;
db.SaveChanges();
}
}
public void AbandonOrderTest2()
{
// Order is added once, customer is added again as expected
Customer c1 = new Customer { Name = "C1", ID = 9 }; // Customer with this ID already exists
Order order = new Order { Customer = c1, CustomerID = c1.ID };
using (Repository.db db = new Repository.db(_connectionString))
{
db.Orders.Add(order);
// Save changes is not called here
}
// db is disposed at this point. Neither order nor c1 should be
// attached to any context as no context exists for them to be
// attached to.
using (Repository.db db = new Repository.db(_connectionString))
{
db.Orders.Add(order);
db.SaveChanges();
}
}
public void AbandonOrderTest3()
{
// Order is added twice, customer is added again as expected
Customer c1 = new Customer { Name = "C1", ID = 9 }; // Customer with this ID already exists
Order order = new Order { Customer = c1, CustomerID = c1.ID };
using (Repository.db db = new Repository.db(_connectionString))
{
db.Orders.Add(order);
// Save changes is not called here
}
// db is disposed at this point. Neither order nor c1 should be
// attached to any context as no context exists for them to be
// attached to.
// --- New up the order again
order = new Order { Customer = c1, CustomerID = c1.ID };
using (Repository.db db = new Repository.db(_connectionString))
{
var orderState = db.Entry(order).State; // Detached
var custState = db.Entry(order.Customer).State; // Detached
db.Orders.Add(order);
db.SaveChanges();
}
}
спасибо за ваш ответ, однако я не думаю, что это относится к моему делу. Я использую .net/C# not php. Я добавил тег C# к моему вопросу (мой плохой). – Sam