#c# #dependency-injection #entity-framework-core
Вопрос:
Я читал, и лучше всего, что я использую AddScoped в своем проекте EF Core, чтобы я мог использовать много контекстов для своих обновлений, поэтому я могу остановить сообщение об ошибке «уже отслежено», когда я выполняю свои изменения сохранения.
Вот мой код для внедрения зависимостей. Просто интересно, как я могу сделать это «AddScoped» вместо Singleton?
Любая помощь была бы замечательной, так как я довольно новичок в этом внедрении зависимостей, EF Core и т.д.
public override void Configure(IFunctionsHostBuilder builder)
{
// CCT database
builder.Services.AddDbContext<sqldbCCTUKSATPPreProdContext>(
options =>
{
const string ConnString = "SQLConnectionStringCCT";
options.UseSqlServer(Configuration.GetConnectionString(ConnString)).UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll);
});
// CL database (Segimport DB)
builder.Services.AddDbContext<sqldbCLSegImportUKSATPPreProdContext>(
options =>
{
const string CLConnString = "SQLConnectionStringCL";
options.UseSqlServer(Configuration.GetConnectionString(CLConnString)).UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll);
options.EnableSensitiveDataLogging();
});
Ответ №1:
AddDbContext
регистрирует контекст как ограниченный по умолчанию — см. Значение по умолчанию, для contextLifetime
которого оно равно ServiceLifetime.Scoped
. Ваша проблема с «уже отслеженным» исходит откуда-то еще.
Комментарии:
1. Я бы подумал, что тогда, когда я выполняю SaveChanges, это должно остановить уже отслеживаемую проблему?
2. @Jason_Hough без минимального воспроизводимого примера я не могу много сказать. Я предполагаю, что вы извлекаете объект с помощью своего запроса, а затем пытаетесь добавить другой объект с тем же идентификатором.
3. @Jason_Hough: чтобы мы могли ответить на этот вопрос, вам нужно опубликовать минимальный, воспроизводимый пример.
4. @Jason_Hough и я бы сказал, что это должен быть совершенно новый вопрос =)
5. понятно — я напишу новый вопрос о моей проблеме с отслеживанием.