gpt4 book ai didi

c# - 使用 ApplicationUser 创建数据库时 MVC5 Entity Framework 代码优先错误

转载 作者:行者123 更新时间:2023-11-30 22:04:59 25 4
gpt4 key购买 nike

非常感谢有关如何在 MVC5 中我自己的自定义类中使用 ApplicationUser 的一些指导。

简单模型,使用脚手架创建 Controller 和 View ,sm DbContext 用于来自 Internet 应用程序模板的默认 ApplicationUser (IdentityUser)。我想使用 ApplicationUser 用当时登录的任何人的详细信息标记事务。

当 Entity Framework 尝试 DropAndRecreateAlways 时,我遇到了两个数据库错误之一

首先是我的课:

public class Example
{
public int ID { get; set; }

[Required]
public string Description { get; set; }

[Required]
public double Amount { get; set; }

[Required]
public virtual ApplicationUser CreatedBy {get; set;}

[Required]
public virtual ApplicationUser ModifiedBy { get; set; }
}

Entity Framework 尝试创建数据库时出现的错误是:

  1. {“在模型生成期间检测到一个或多个验证错误:\r\n\r\nMvcApplication1.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' 没有定义键。为此 EntityType 定义键。\r\nMvcApplication1.Models.IdentityUserRole::EntityType 'IdentityUserRole' 没有定义键。为此 EntityType 定义键。\r\nIdentityUserLogins: EntityType: EntitySet 'IdentityUserLogins' 基于没有定义键的类型 'IdentityUserLogin'。\r\nIdentityUserRoles: EntityType: EntitySet 'IdentityUserRoles' 基于未定义键的类型 'IdentityUserRole'。\r\n"}

  2. 由于级联删除导致的参照完整性(我可以覆盖 DbContext 以移除级联删除)

实现此目标的最佳方法是什么?任何指导将不胜感激。

最佳答案

你的问题是你忘了打电话

base.OnModelCreating(modelBuilder);

最重要的是你的方法,因为就像你说的那样,ApplicationDbContext 是默认继承自 IdentityDbContext 创建的。所以调用 base.OnModelCreating,让你基类即 IdentityDbContext,生成你需要的一切。

但是如果您仍想使用流畅的 API,则为这两个实体创建 key 的正确方法是

modelBuilder.Entity<IdentityUserLogin>().HasKey(t => new { t.UserId, t.ProviderKey, t.LoginProvider });
modelBuilder.Entity<IdentityUserRole>().HasKey(t => new { t.RoleId, t.UserId });

如果不这样做,调用 UserManager 的 AddToRole(userid, rolename) 方法将抛出一个异常,需要您添加的额外键,并显示消息“需要字段 UserId 或 RoleId”。

关于c# - 使用 ApplicationUser 创建数据库时 MVC5 Entity Framework 代码优先错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24696158/

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