- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个从同事那里得到的 ASP MVC 项目,它有 2 个上下文。一个来自登录所需的模板,另一个是自制的。所以我想把两者结合起来,但我总是收到这个错误:
ApplicationUser is not part of the model for the current context
模型是数据库优先。我首先制作了我的 SQL 表,然后制作了一个 ADO.NET 实体数据模型,它给出了我的这个 connectionString:
<add name="DairyCowBarnEntities" connectionString="metadata=res://*/Models.DairyCowBarnModel.csdl|res://*/Models.DairyCowBarnModel.ssdl|res://*/Models.DairyCowBarnModel.msl;provider=System.Data.SqlClient;provider connection string="data source=server;initial catalog=DairyCowBarn;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
在此数据库中,添加了所需的 ASP.NET 表,并且还在数据模型中。我通过迁移添加了 ASP.NET 表。
这是我的 DbContext 类:
public partial class DairyCowBarnEntities : IdentityDbContext<ApplicationUser>
{
public DairyCowBarnEntities()
: base("name=DairyCowBarnEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public static DairyCowBarnEntities Create()
{
return new DairyCowBarnEntities();
}
public virtual DbSet<C__MigrationHistory> C__MigrationHistory { get; set; }
public virtual DbSet<C__RefactorLog> C__RefactorLog { get; set; }
public virtual DbSet<AspNetRole> AspNetRoles { get; set; }
public virtual DbSet<AspNetUserClaim> AspNetUserClaims { get; set; }
public virtual DbSet<AspNetUserLogin> AspNetUserLogins { get; set; }
public virtual DbSet<AspNetUser> AspNetUsers { get; set; }
public virtual DbSet<jntConcentrateMixture> jntConcentrateMixtures { get; set; }
public virtual DbSet<jntConsistingParcel> jntConsistingParcels { get; set; }
}
我读到 ApplicationUser 需要像这样的普通 connectionString:
<add name="DairyCowBarnEntities" connectionString="Data Source=server;Initial Catalog=DairyCowBarn;Integrated Security=True" providerName="System.Data.SqlClient" />
但是我得到了这个错误:
The context is being used in Code First mode with code that was generated from an EDMX file for either Database First or Model First development. This will not work correctly. To fix this problem do not remove the line of code that throws this exception. If you wish to use Database First or Model First, then make sure that the Entity Framework connection string is included in the app.config or web.config of the start-up project. If you are creating your own DbConnection, then make sure that it is an EntityConnection and not some other type of DbConnection, and that you pass it to one of the base DbContext constructors that take a DbConnection.
我不知道如何将两者结合起来。我没主意了。非常感谢和真正需要任何帮助。希望我解释清楚了。否则,只需询问是否需要更多信息。
最佳答案
当您对数据库进行逆向工程时,它会提取您不需要的 AspNet 表。关于身份验证,您唯一需要的模型是
public class ApplicationUser : IdentityUser
{
public DateTimeOffset CreatedOn { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
我已经在我的 AspNetUsers 表中添加了一个 CreatedOn 列,这就是它出现在上述模型中的原因。下一步是确保您的 DbContext 派生自 IdentityDbContext<ApplicationUser>
.该基类将处理到您的 AspNet 表的映射。所以你的 DbContext 应该是这样的:
public partial class DairyCowBarnEntities : IdentityDbContext<ApplicationUser>
{
public DairyCowBarnEntities()
: base("name=DairyCowBarnEntities")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public static DairyCowBarnEntities Create()
{
return new DairyCowBarnEntities();
}
public virtual DbSet<jntConcentrateMixture> jntConcentrateMixtures { get; set; }
public virtual DbSet<jntConsistingParcel> jntConsistingParcels { get; set; }
}
这样做吧,删除所有关于您的 AspNet 的模型以及代码中对这些模型的所有引用。添加 ApplicationUser 模型但不为其创建 DbSet 并将其传递到派生类中 IdentityDbContext<ApplicationUser>
. IdentityDbContext 将处理有关身份验证和授权的所有事情,因此您可以正常使用 UserManager 和 Identity。
请注意,我的 CreatedOn 是使用默认值 (sysdatetimeoffset()) 生成的数据库,但从未起作用。我必须在代码中显式设置 CreatedOn,或者将其填充到数据库中作为 DateTimeOffset.MinValue。
已更新以回答评论:
IdentityDbContext<ApplicationUser>
您的数据库上下文派生自为您处理该映射。它提供了一个抽象层,所以你不必担心它。如果您需要查询那些超出 UserManager 将为您做的表,即;获取所有未确认的用户电子邮件地址,您始终可以编写自己的选择语句并将其传递到您的 dbContext 中,如 dbContext.Database.SqlQuery<T>(sqlQuery, false);
T 在这种情况下将是您创建的模型,它应该具有与您正在查询的列名相同的属性名称和类型。 示例如下。
public Users
{
public string UserName { get; set; }
public bool EmailConfirmed { get; set; }
}
var sqlQuery = "SELECT Users.UserName, Users.EmailConfirmed FROM AspNetUsers WHERE Users.EmailConfirmed = {0}"
var unconfirmedUsers = dbContext.Database.SqlQuery<Users>(sqlQuery, false).ToList();
使用 {0}
并将该值作为参数传递将自动清理该值,因此任何 sql 注入(inject)脚本都不会起作用。
关于c# - ApplicationUser 不是当前上下文模型的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29940581/
我在 Visual Studio 中创建了一个新的 ASP.NET MVC 项目,模板创建了一个 IdentityConfig.cs 文件,如下所示 using System; using Syste
我有一个从同事那里得到的 ASP MVC 项目,它有 2 个上下文。一个来自登录所需的模板,另一个是自制的。所以我想把两者结合起来,但我总是收到这个错误: ApplicationUser is not
我正在使用 ASP.NET Identity 2.0。目前我想通过表 UserDetails 扩展 ApplicationUser(将 AspNetUsers 重命名为 Users),例如 First
是否可以检查 ApplicationUser 是否有声明? 我知道可以检查 ApplicationUser 是否在某个角色中 userManager.IsInRoleAsync(application
在我的 MVC 应用程序中,我使用 TPT inheritance 创建了基本 ASP Identity ApplicationUser 类的两个子类。 ,并希望向对象添加一些声明,以便我可以轻松地在
我正在尝试为我的模拟 ApplicationUserManager 提供一个 ApplicationUser。当我尝试添加角色时,我注意到 Roles 是一个只读属性。不确定在我的测试中实现的最佳方式
我创建了一个名为 Person 的自定义类来存储姓名、地址等。这个类/模型是从其他模型交叉引用的,包括 ApplicationUser: public class ApplicationUser :
我有以下实体: public class ApplicationUser : IdentityUser { ... public int? StudentId { get; set;
我在 Asp.net 中有一个 Web 应用程序,首先使用 Entity Framework 6 和数据库。用户连接时遇到问题。这是我的代码: Web.config
我正在从 Identity 1.0.0 迁移到 Identity 2.0.1 之后 article 并且生成的迁移代码与新的 IdentityUser 无关。它不会添加新列。 所以我做了一个新项目并再
我正在尝试掌握 ASP.NET MVC 5 中引入的新成员资格系统,但我遇到了一个小问题,我很确定您能帮我解决这个问题。 我要离开 this tutorial并为 ApplicationUser 引入
应该在什么基础上决定使用 IdentityDbContext与 IdentityDbContext在 ASP.NET MVC5 应用程序中? 使用IdentityDbContext给我们带来什么好处而
我希望能够使用 WebAPI 2 公开用户列表。但是,由于我在 MVC5 中使用新的 Asp.Net 身份验证框架,我似乎找不到一种方法来仅将特定字段标记为 数据成员。 这是我所拥有的: [DataC
我有这门课 public class ApplicationUser : IdentityUser { public string Email { get; set; } public s
Cannot implicitly convert type 'System.Collections.Generic.List' to 'System.Collections.Generic.IE
我正在谷歌搜索以在 ASP.NET Identity 3.0 的 Controller 中获取应用程序用户,但我只找到 5 及以下的结果。 我正在尝试获取 ApplicationUser 属性,但我根
我问过有关旧 MVC 版本和成员资格的类似问题,但这些解决方案不适用于 Idendity 和 MVC 6。 我想在 _LoginPartial.cshtml 文件中显示用户的名字。因此,我想访问当前登
我首先使用实体框架代码对用户创建小的 CRUD 操作。现在我需要使用存储过程删除用户,所以我找到许多链接获取如何在 EF 中使用存储过程的解决方案。所以我写这段代码那个。但是我在类中编写此代码和方
我将这个问题作为文档发布,因为我花了很多时间才找到这个简单的问题。我正在使用 VS15 生成的原始 MVC 项目并尝试对其进行修改。 错误:[InvalidOperationException:实体类
我正在使用 EF6/.Net 4.5.1 在 Web 窗体的用户控件中检索 ListView 的数据。我修改了 ApplicationUser 以包含一个使用 FK 属性的导航属性 [1:1],该属性
我是一名优秀的程序员,十分优秀!