Внедрение основных зависимостей EFC#

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

Сообщение 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#»