- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我尝试自己添加“AppUserRoles”表以从用户访问 UserRoles 时出现此错误,例如:
from u in _userManager.Users.Where(x => x.UserRoles "contain" "some codition here")
我得到了这个错误:
A key cannot be configured on 'AppUserRoles' because it is a derived type. The key must be configured on the root type 'IdentityUserRole'. If you did not intend for 'IdentityUserRole' to be included in the model, ensure that it is not included in a DbSet property on your context, referenced in a configuration call to ModelBuilder, or referenced from a navigation property on a type that is included in the model.
这是我之前的代码,运行正常:
builder.Entity<IdentityUserRole<Guid>>().ToTable("AppUserRoles")
.HasKey(x => new { x.RoleId, x.UserId });
--->我改成这样:
我的用户类
[Table("AppUsers")]
public class AppUser : IdentityUser<Guid>, IDateTracking, ISwitchable
{
public virtual ICollection<AppUserRoles> UserRoles { get; set; }
}
我的角色类
[Table("AppRoles")]
public class AppRole : IdentityRole<Guid>
{
public virtual ICollection<AppUserRoles> UserRoles { get; set; }
}
我的 appUserRole 类:
[Table("AppUserRoles")]
public class AppUserRoles : IdentityUserRole<Guid>
{
public virtual AppUser User { get; set; }
public virtual AppRole Role { get; set; }
}
我的 DbContextClass
public class AppDbContext : IdentityDbContext<AppUser, AppRole, Guid>
{
public AppDbContext(DbContextOptions options) : base(options)
{
}
public DbSet<AppUser> AppUsers { get; set; }
public DbSet<AppRole> AppRoles { get; set; }
public DbSet<AppUserRoles> AppUserRoles { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
#region Identity Config
builder.Entity<IdentityUserClaim<Guid>>().ToTable("AppUserClaims").HasKey(x => x.Id);
builder.Entity<IdentityUserLogin<Guid>>().ToTable("AppUserLogins").HasKey(x => x.UserId);
builder.Entity<AppUserRoles>(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();
});
builder.Entity<IdentityUserToken<Guid>>().ToTable("AppUserTokens")
.HasKey(x => new { x.UserId });
#endregion Identity Config
}
public override int SaveChanges()
{
var modified = ChangeTracker.Entries().Where(e => e.State == EntityState.Modified || e.State == EntityState.Added);
foreach (EntityEntry item in modified)
{
var changedOrAddedItem = item.Entity as IDateTracking;
if (changedOrAddedItem != null)
{
if (item.State == EntityState.Added)
{
changedOrAddedItem.DateCreated = DateTime.Now;
}
changedOrAddedItem.DateModified = DateTime.Now;
}
}
return base.SaveChanges();
}
}
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<AppDbContext>
{
public AppDbContext CreateDbContext(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
var builder = new DbContextOptionsBuilder<AppDbContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseSqlServer(connectionString);
return new AppDbContext(builder.Options);
}
}
这是我的启动文件:
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
o => o.MigrationsAssembly("YayoiApp.Data.EF")),
ServiceLifetime.Scoped);
请给我一些建议,我已经研究了很多,但没有找到解决方案。谢谢。
最佳答案
定制IdentityUserRole<Guid>
, 你需要改变你的 DbContext
喜欢
public class ApplicationDbContext : IdentityDbContext<AppUser
, AppRole
, Guid
, IdentityUserClaim<Guid>
, AppUserRoles
, IdentityUserLogin<Guid>
, IdentityRoleClaim<Guid>
, IdentityUserToken<Guid>>
{
然后在Startup.cs
中注册
services.AddIdentity<AppUser, AppRole>()
.AddDefaultUI(UIFramework.Bootstrap4)
.AddEntityFrameworkStores<ApplicationDbContext>();
用例:
public class HomeController : Controller
{
private readonly UserManager<AppUser> _userManager;
private readonly RoleManager<AppRole> _roleManager;
public HomeController(UserManager<AppUser> userManager
, RoleManager<AppRole> roleManager)
{
_userManager = userManager;
_roleManager = roleManager;
}
public async Task<IActionResult> Index()
{
var userName = "Tom";
var passWord = "1qaz@WSX";
var appUser = new AppUser
{
UserName = userName
};
await _userManager.CreateAsync(appUser, passWord);
var roleName = "Admin";
await _roleManager.CreateAsync(new AppRole { Name = roleName });
await _userManager.AddToRoleAsync(appUser, roleName);
var roles = appUser.UserRoles;
return View();
}
关于entity-framework - Entity Framework : Cannot be configured on 'xxx' class because it is a derived type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54718843/
我在 Ubuntu 11.10 和最新版本的 NetBeans 下使用 C++。假设我有以下代码: class Node {} class DerivedNode : public Node {} c
这两者在 GHC 中有什么区别。它们的预期用途似乎相似,但 deriving (Data)已经存在了一段时间了deriving (Generic)最近才添加到 GHC 中。 是 deriving (G
当您将矩阵对象作为 MatrixBase 引用传递给函数时会发生什么?我不明白幕后到底发生了什么。 示例函数代码如下: #include #include using namspace Eigen
我正在尝试了解如何在 Eigen 中使用样条曲线,特别是我想在某个点上找到样条插值及其一阶和二阶导数的值。找到内插值很容易,但是当我尝试计算导数时,我得到了奇怪的值。 我尝试按照手册 ( http:/
使用 C++ Builder XE7 我有一个带有 TImageList 对象的基本表单 object FormBase: TFormBase Left = 0 Top = 0 Capti
我正在制作基类和派生类。派生类的值将为 Eigen::Matrix , 并继承了 Base 的所有方法。 我这样做是为了使无论矩阵类型如何都相同的方法不会因为 Matrix 的不同模板参数而全部重复。
我最近更新到最新的 Eigen 版本 (3.3.90),看起来它破坏了我之前工作的东西(在我使用 libigl 库附带的 Eigen 版本 3.2.10 之前)。 我想将 block 的结果存储到一个
我最近一直在尝试“向我学习 Haskell”,我想创建一个新类型来表示整数状态,而不仅仅是使用原始 Integer(为了类型安全和代码清晰)。具体来说,以下代码编译: newtype AuxState
这个问题已经有答案了: Access subclass fields from a base class in Java (4 个回答) 已关闭 4 年前。 我对 Java 和面向对象编程总体来说是新
我有这些类,事件记录模式的实现: public abstract class RecordCollection : ObservableCollection where T : Record publ
首先,这个问题非常类似于 downcasting shared pointer to derived class with additional functionality is ,哪里有好的答案。但
好的,我正在通读 this entry in the FQA处理将 Derived** 转换为 Base** 的问题以及为什么它被禁止,我得到的问题是你可以分配给 Base* 不是 Derived*
我正在使用 Boost.Python 将我的 C++ 代码公开给 Python。我遇到了与将对象从一种语言多次传递到另一种语言有关的困难。这是我想要做的: C++代码 class Base { p
这个问题在这里已经有了答案: Downcasting using the 'static_cast' in C++ (3 个答案) 关闭 8 年前。 我不明白为什么会这样。pReallyABase
https://sqlzoo.net/wiki/SELECT_within_SELECT_Tutorial 的问题 7 “找到每个大陆中最大的国家(按面积),显示大陆、名称和面积:” 我不明白为什么
我很难理解为什么以下代码无法编译: template class Base { public: Base(int a){} }; template class Derive
我很难理解为什么以下代码无法编译: template class Base { public: Base(int a){} }; template class Derive
Base to Derived 是可能的(装箱)。但是 Derived to base 给出了运行时异常,然而这相当于拆箱。为什么会这样 Base b = new Base(); Child c =
库代码 我的图书馆有一个 CRTP 类 B . 我创建了一个 Trait使用户能够更改 B 行为的类. 默认设置为 int . ( #1 ) #include #include //B and T
我正在学习 C++ 继承,所以我通过动态创建一个 Base 类来尝试这段代码,并对它的 Derived 类进行向下转换(显然向下转换无效)以使这个动态创建的 Base 对象被指向派生类指针。但是当我通
我是一名优秀的程序员,十分优秀!