По моим исследованиям, лучше всего использовать DI и DBContextFactory . Затем оберните каждую операцию в отдельный контекст БД.
Код: Выделить всё
// Program.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContextFactory();
}
// OrderService.cs
private readonly IDbContextFactory _contextFactory;
public OrderService(IDbContextFactory contextFactory)
{
_contextFactory = contextFactory;
}
public async Task GetAllOrders()
{
using var ctx = _contextFactory.CreateDbContext();
return await _context.Orders.Include(o=>o.OrderLines).ToArrayAsync();
}
Например, если данные привязаны к редактируемой таблице данных.
Если многие заказы редактируются, я не могу просто выполнить «context.SaveChanges()», когда пользователь нажимает «Сохранить», и использовать только ядро EF. обновите поля, которые изменились.
Код: Выделить всё
@inject OrderService _orderSerivce;
void DoTest()
{
var orders =_orderSerivce.GetAllOrders(); // Gets 500 orders
Random r = new Random();
// edit upto 20 orders.
for(int i = 0; i < 20; i++)
{
int rInt = r.Next(0, orders.Length-1);
orders[rInt].CustomerName = "NameChanged " + i;
}
_orderSerivce.UpdateOrders(orders); // ?? What should this do
}
Должен ли я просто прикрепить заказы и позволить ей обновить все 500 заказов. Функция SaveChanges отслеживала бы, что было отредактировано и что нового, и обрабатывала бы все это за меня.
Но с удаленным контекстом, как мне теперь извлечь только изменения для обновления?
Подробнее здесь: https://stackoverflow.com/questions/791 ... zor-server