Внедрение зависимостей EF CoreC#

Место общения программистов C#
Ответить
Anonymous
 Внедрение зависимостей EF Core

Сообщение Anonymous »

Я новичок в DI и столкнулся с проблемой. Я создаю приложение Avalonia на C#, которое использует локальную базу данных PostgreSQL. При регистрации в приложении одновременно проверяется, существуют ли адрес электронной почты и имя пользователя в базе данных, и поэтому отображается соответствующая ошибка.

Код: Выделить всё

private async Task registerCommand()
{
var service = this.user_service;
Task exists_username = service.ExistsByUsernameAsync(this.UsernameField.Text);
Task exists_email = service.ExistsByEmailAdressAsync(this.EmailField.Text);
var results = await Task.WhenAll(exists_username , exists_email);

// ....
}
Я получаю следующие ошибки:

InvalidOperationException: вторая операция была запущена в этом экземпляре контекста до завершения предыдущей операции. . Обычно это вызвано тем, что разные потоки одновременно используют один и тот же экземпляр DbContext. Для получения дополнительной информации о том, как избежать проблем с потоками с помощью DbContext

и

ReactiveUI .UnhandledErrorException: 'Объект, реализующий IHandleObservableErrors (часто ReactiveCommand или ObservableAsPropertyHelper), совершил ошибку, тем самым нарушив наблюдаемый конвейер. Чтобы предотвратить это, убедитесь, что в конвейере нет ошибок, или подпишитесь на свойство ThrownExceptions рассматриваемого объекта для обработки ошибочного случая.

Одновременное использование тот же экземпляр DbContext? Я регистрирую его как службу с ограниченной областью действия.

Код: Выделить всё

public static void AddCommonServices(this IServiceCollection collection)
{
collection.AddScoped();
collection.AddScoped();
collection.AddScoped();
}
Пользовательский репозиторий:

Код: Выделить всё

public class UserRepository : IUserRepository
{
private DatabaseContext context = null!;

public UserRepository(DatabaseContext dbcontext) => this.context = dbcontext;
// ....
}
Обслуживание пользователей:

Код: Выделить всё

public class UserService
{
private IUserRepository repository;

public UserService(IUserRepository userRepository) => this.repository = userRepository;
// ....
}
С чего все начинается:

Код: Выделить всё

private void goToRegister() => this.authVM.AuthContent = new RegisterVM(authVM, services.GetRequiredService());
Помогите, пожалуйста?
Я должен добавить, что при выполнении двух задач одно за другим они работают нормально, поэтому мой вопрос в том же самом DbContext вызывается из разных потоков?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -injection
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»