ServiceLifetime.Transient вызывает различные исключения базы данных - PullRequest
0 голосов
/ 06 ноября 2018

Я удаляю базу данных, создаю ее снова и заполняю данными.

С этим типом реестра все отлично работает

services.AddDbContext<Context>
(
   options => options.UseSqlServer(Configuration["Database"]
);

Но, когда я добавляю ServiceLifetime.Transient, мгновенно выдает различные исключения, такие как:

services.AddDbContext<Context>
(
   options => options.UseSqlServer(Configuration["Database"], ServiceLifetime.Transient
);

SqlException: Нарушение ограничения PRIMARY KEY 'PK_myTable'. Невозможно вставить дубликат ключа в объект 'dbo.myTable'. Дубликат значения ключа ([guid]). Заявление было прекращено.

SqlException: невозможно вставить явное значение для столбца идентификаторов в таблице 'myTable', когда для IDENTITY_INSERT установлено значение OFF.

Что может быть не так?

public void Configure(IApplicationBuilder app, IHostingEnvironment env, Context context, SignInManager<User> sm, UserManager<User> um)
{
    (...)
    context.Database.EnsureDeleted();
    context.Database.EnsureCreated();
    new Initializer(context, um).Initialize().Wait();
    (...)
}

public class Initializer
{
    private readonly UserManager<User> _userManager;
    private readonly Context _ctx;

    public Initializer(Context c, UserManager<User> um)
    {
        _ctx = c;
        _userManager = um;
    }

    public async Task Initialize()
    {
        filling my objects with data

        (No, I'm not setting value to Id anywhere)
        _ctx.SaveChanges();
    }

Могу поспорить, что это из-за async / .Wait ()?

1 Ответ

0 голосов
/ 07 ноября 2018

Решение:

Я удалил

ServiceLifetime.Transient

и затем в своем классе Initializer я добавил .Wait () к

userManager.CreateAsync ();

Потому что я создавал пользователей динамически.

и он перестал выдавать исключения об использовании контекста в другом потоке.

или вообще его ждут?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...