asp.net 创建IdentityDbContext迁移时出错

46scxncf  于 2023-03-20  发布在  .NET
关注(0)|答案(1)|浏览(144)

我需要创建一个使用IdentityDbContext类的数据库(来自Microsoft.AspNetCore.Identity.EntityFrameworkCore)。
但是我有问题让它迁移。(当我提示“Add-Migration InitialCreate”我得到错误“无法创建类型'SwimmingClubContext'的对象。对于在设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728")。我是这个包的新手,所以如果有人能指出我做的任何缺陷并解释它们,将是非常感激的!

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore;

    public class SwimmingClubContext : IdentityDbContext<IdentityUser, IdentityRole, string> {
        public DbSet<Member> Members { get; set; }
        public DbSet<coach> Coaches { get; set; }
        public DbSet<swimmer> Swimmers { get; set; }
        public DbSet<Attendance> Attendances { get; set; }
        public DbSet<MemberRole> MemberRoles { get; set; }
        public DbSet<Role> Roles { get; set; }
        public DbSet<Race> Races { get; set; }
        public DbSet<Result> Results { get; set; }
        public DbSet<workout> workouts { get; set; }
        public DbSet<swimmingpool> swimmingpools { get; set; }

        public SwimmingClubContext(DbContextOptions<SwimmingClubContext> options) : base(options) {
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
            if (!optionsBuilder.IsConfigured) {
                optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=DBName;Trusted_Connection=True;MultipleActiveResultSets=true");
            }
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder) {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<coach>()
                .HasMany<workout>()
                .WithOne()
                .HasForeignKey(w => w.coachId)
                .OnDelete(DeleteBehavior.Cascade);

            modelBuilder.Entity<workout>()
                .HasOne<coach>()
                .WithMany()
                .HasForeignKey(w => w.coachId)
                .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<Attendance>()
               .HasOne<workout>()
               .WithMany()
               .HasForeignKey(a => a.WorkoutId)
               .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<Attendance>()
                .HasOne<swimmer>()
                .WithMany()
                .HasForeignKey(a => a.SwimmerId)
                .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<Result>()
                .HasOne<swimmer>()
                .WithMany()
                .HasForeignKey(a => a.SwimmerId)
                .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<Race>()
                .HasMany<Result>()
                .WithOne()
                .HasForeignKey(a => a.RaceId)
                .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<workout>()
               .HasOne<swimmingpool>()
               .WithMany()
               .HasForeignKey(w => w.idSwimmingPool)
               .IsRequired(false)
               .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<Race>()
               .HasOne<swimmingpool>()
               .WithMany()
               .HasForeignKey(w => w.SwimmingPoolId)
               .IsRequired(false)
               .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<Member>()
                .HasMany<MemberRole>()
                .WithOne()
                .HasForeignKey(a => a.idMember)
                .OnDelete(DeleteBehavior.Restrict);

            modelBuilder.Entity<Role>()
                .HasMany<MemberRole>()
                .WithOne()
                .HasForeignKey(a => a.RoleId)
                .OnDelete(DeleteBehavior.Restrict);


            /// <summary>
            /// Unique propperties
            /// </summary>
            modelBuilder.Entity<swimmingpool>()
                .HasIndex(p => p.Name)
                .IsUnique();
            modelBuilder.Entity<swimmingpool>()
                .HasIndex(s => s.street)
                 .IsUnique();

            modelBuilder.Entity<Race>()
                .HasIndex(s => s.Schedule)
                .IsUnique();
            modelBuilder.Entity<Attendance>()
                .HasNoKey();
            modelBuilder.Entity<MemberRole>()
                .HasNoKey();
            modelBuilder.Entity<Result>()
                .HasNoKey();
        }
    }
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net7.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="7.0.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="MySql.Data.EntityFramework" Version="8.0.32" />
    <PackageReference Include="MySql.EntityFrameworkCore" Version="7.0.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\Globals\Entities.csproj" />
  </ItemGroup>

</Project>

我试过只将它与DBContext一起使用,效果很好,所以我确信这是我对IdentityDbContext包的实现。

anhgbhbe

anhgbhbe1#

我自己想出来的。
我没有在应用程序的依赖注入容器中注册该服务(对于我来说是program.cs)。

builder.Services.AddDbContext<SwimmingClubContext>(options =>
                options.UseSqlServer(configuration.GetConnectionString("IdentityConString")));

            builder.Services.AddIdentity<AppUser, IdentityRole>()
                .AddEntityFrameworkStores<SwimmingClubContext>()
                .AddDefaultTokenProviders();

AppUser是从IdenityUser包类继承的类。

public class AppUser : IdentityUser{
        public Member member;
    }

相关问题