Entity Framework Core не создает идентификационные и другие таблицы MVC Code First - PullRequest
1 голос
/ 13 марта 2020

У меня проблема с моим веб-проектом. Даже после нескольких попыток добавления миграций он не создает таблиц в моей базе данных. Это говорит о том, что база данных уже обновлена. Я пытался использовать Seeder, но это не помогло. Я все еще могу добавлять таблицы с запросами вручную, но с таблицами идентичности это будет проблемой. Мой код в EFDbContext:

protected override void OnModelCreating(ModelBuilder builder)
{
    foreach (var relationship in builder.Model.GetEntityTypes().SelectMany(e => e.GetForeignKeys()))
    {
        relationship.DeleteBehavior = DeleteBehavior.Restrict;
    }

    base.OnModelCreating(builder);

    builder.Entity<DbUserRole>(userRole =>
    {
        userRole.HasKey(ur => new { ur.UserId, ur.RoleId });
        userRole.HasOne(ur => ur.Role)
            .WithMany(r => r.UserRoles)
            .HasForeignKey(ur => ur.RoleId)
            .IsRequired();
        userRole.HasOne(ur => ur.User)
            .WithMany(r => r.UserRoles)
            .HasForeignKey(ur => ur.UserId)
            .IsRequired();
    });
}

public virtual DbSet<Country> Countries { get; set; }
public virtual DbSet<Category> Categories { get; set; }
public virtual DbSet<Manufacturer> Manufacturers { get; set; }
public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<UserProfile> UserProfiles { get; set; }
public virtual DbSet<FileModel> Files { get; set; }
public virtual DbSet<Subcategory> Subcategories { get; set; }

При запуске:

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDbContext<EFDbContext>(options =>
        options.UseSqlServer(
          Configuration.GetConnectionString("DefaultConnection")));

    services.AddIdentity<DbUser, DbRole>(options => options.Stores.MaxLengthForKeys = 128)
        .AddEntityFrameworkStores<EFDbContext>()
        .AddDefaultTokenProviders();

    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.LoginPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login");
            options.AccessDeniedPath = new Microsoft.AspNetCore.Http.PathString("/Account/Login");
        });

    services.AddTransient<IProduct, ProductRepository>();
    services.AddTransient<ICategory, CategoryRepository>();
    services.AddTransient<ICountry, CountryRepository>();
    services.AddTransient<IManufacturer, ManufacturerRepository>();

    services.AddMemoryCache();
    services.AddSession();

    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseAuthentication();

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseSession();
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
        routes.MapRoute(
            name: "categoryfilter",
            template: "Product/{action}/{category?}",
            defaults: new { Controller = "Product", action = "ListProducts" });
    });
}

Я переделывал другой проект, изменяя классы, строку подключения, но сохраняя основной код. Так что я не понимаю проблемы. Если у вас есть какие-либо предположения, напишите их.

...