I'm still relatively new to EF, so forgive me if I lack an obvious concept.
Let me see if I can simplify this ... The old question is in the history of changes, but I think I can get rid of it:
FWIW, DbContext
- REQUEST, not static
, therefore the first example works. Not using DI / IoC on the controller at this point.
public class OrdersController : ApiController {
private MyDbContext db = new MyDbContext();
protected override void Dispose(bool disposing) {
db.Dispose();
}
}
Works (2 separate requests):
public Order Post([FromBody]Order order) {
db.Orders.Add(order);
db.SaveChanges();
return order;
}
public void NotifyCustomerService(int orderid) {
var order = db.Orders.Find(orderid);
}
Broken (single request):
public Order Post([FromBody]Order order) {
db.Orders.Add(order);
db.SaveChanges();
return order;
}
Works (one request) (but I know this is a terrible practice):
public Order Post([FromBody]Order order) {
db.Orders.Add(order);
db.SaveChanges();
using(var db2 = new MyDbContext()) {
var sameOrderWTF = db.Orders.Find(order.ID);
}
return order;
}
, , , nav . DbContext... , , in-mem, . , .
public Order Post([FromBody]Order o) {
Order order = db.Orders.Create();
db.Orders.Add(order);
db.Entry(order).CurrentValues.SetValues(o);
o.OrderLines.ToList().ForEach(l => {
var line = db.OrderLines.Create();
db.OrderLines.Add(line);
db.Entry(line).CurrentValues.SetValues(l);
order.OrderLines.Add(line);
});
db.SaveChanges();
return order;
}
, , ( Uber Bot), , ( ) ASP.NET MVC EF. , ViewModels VM , , EF, .