gpt4 book ai didi

asp.net-mvc - Entity Framework Core 与 .Net 4.7 MVC 身份问题

转载 作者:行者123 更新时间:2023-12-05 06:32:46 24 4
gpt4 key购买 nike

我希望在我刚刚开始构建的项目中用 EF Core 替换 EF6。

我面临的问题是,目前我正在从 IdentityDbContext 继承我的上下文,就像使用 Identity 一样。

public partial class MyContext : IdentityDbContext<ApplicationUser>

迁移到 EF Core 需要我使用 Identity Core。这在我的数据访问层中很好,因为我可以改为引用 Microsoft.AspNetCore.Identity.EntityFrameworkCore。

我发现的真正问题是在我的 MVC .Net 4.7 应用程序中尝试使用它时,Identity Core 将无法工作,因为它不是 .Net Core。

那么我最好的选择是将 Identity 拆分到它自己的上下文中,还是有一种方法可以像我现在一样通过使用非 Identity Core 继承 IdentityContext 来使用 EF Core?

还是我的想法完全错误...

谢谢

最佳答案

我刚刚所做的是将 IdentityDbContext 中的功能直接重新实现到我的 DbContext + 提供的用户存储中。真的没有魔法。 IdentityDbContext 所做的唯一一件事就是将一些数据集和一些映射添加到您的上下文中。

您可以在这里找到您需要的一切:https://github.com/aspnet/AspNetIdentity/tree/master/src/Microsoft.AspNet.Identity.EntityFramework

我们使用 Guid 作为 ID,因为我们已经有了自定义类,例如 CustomUserLogin,它继承自 IdentityUserLogin,所以我只是将基类中的所有内容都移到了该类中。

您将看到的一件事是旧代码在两个方向上都没有适当的导航属性。我添加了这个,这样我就可以像这样映射:

    private void SetupIdentityTables(ModelBuilder modelBuilder)
{
var user = modelBuilder.Entity<ApplicationUser>()
.ToTable("AspNetUsers");
user.HasMany(u => u.Roles).WithOne().HasForeignKey(ur => ur.UserId);
user.HasMany(u => u.Claims).WithOne().HasForeignKey(uc => uc.UserId);
user.HasMany(u => u.Logins).WithOne().HasForeignKey(ul => ul.UserId);
user.Property(u => u.UserName)
.IsRequired()
.HasMaxLength(256);
user.HasIndex(x => x.UserName).HasName("UserNameIndex").IsUnique();

// CONSIDER: u.Email is Required if set on options?
user.Property(u => u.Email).HasMaxLength(256);

modelBuilder.Entity<CustomUserRole>()
.ToTable("AspNetUserRoles")
.HasKey(r => new { r.UserId, r.RoleId });

modelBuilder.Entity<CustomUserLogin>()
.ToTable("AspNetUserLogins")
.HasKey(l => new { l.LoginProvider, l.ProviderKey, l.UserId });

modelBuilder.Entity<CustomUserClaim>()
.ToTable("AspNetUserClaims");

var role = modelBuilder.Entity<CustomRole>()
.ToTable("AspNetRoles");
role.Property(r => r.Name)
.IsRequired()
.HasMaxLength(256);
role.HasIndex(x => x.Name).HasName("RoleNameIndex").IsUnique();
role.HasMany(r => r.Users).WithOne().HasForeignKey(ur => ur.RoleId);
}

注意:这段代码实际上并不能很好地工作,因为它有一些外键问题。我需要再看一下映射,但您至少应该明白了。

关于asp.net-mvc - Entity Framework Core 与 .Net 4.7 MVC 身份问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51091677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com