【问题标题】:ASP .NET - MVC 5 - Entity Framework - Code First - Forms AuthenticationASP .NET - MVC 5 - 实体框架 - 代码优先 - 表单身份验证
【发布时间】:2017-05-20 01:08:54
【问题描述】:

我继承了一个使用代码优先方法创建的 MVC 5 项目。该项目具有用于身份验证/授权的所有类(我们在这里称它们为 A/A)(AccountController.cs、ManageController.cs 等)。它在 References 文件夹下还有 A/A 所需的所有引用(如 Microsoft.AspNet.Identity.Core 等),但 A/A 没有实现,web.config 说:

  <system.web>
    <authentication mode="None" />​

我改成了:

   <authentication mode="Forms">
      <forms loginUrl="~Account/LogIn" timeout="1880" />

现在它带我进入登录页面等。

我卡住的地方是自动生成的 A/A 代码是指 ApplicationDbContext(例如:在 IdentityModels.cs 中),以及处理用户输入数据等屏幕的 web 应用程序的功能部分,访问数据库通过 VehicleDBContext。

在 web.config 中有一个名为 VehicleDBConnection 的 SQL Server 连接,A/A 应该使用相同的上下文和连接,因此在 ApplicationDbContext 的构造函数中,我将基类设置为指向该连接:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("name=VehicleDBConnection", throwIfV1Schema: false)
    {
    }

此时我检查了数据库并且不支持 A/A,我的意思是没有像 dbo.AspNetUsers 之类的表。所以如果我尝试创建用户,错误页面会显示“无效的对象名称 'dbo. AspNetUsers'"

我尝试按如下方式为 A/A 生成表,但我收到错误 b/c 还有 2 个上下文:

PM> 启用迁移 在程序集中发现了不止一种上下文类型

我希望只有 1 个上下文,但如果这意味着登录自动生成的代码发生重大变化,最好保留 2 个单独的上下文,只要它们指向同一个连接。

如何在不影响其他应用程序类迁移的情况下,将支持 A/A 的数据库表、存储过程等自动生成到现有数据库中?

提前谢谢你,

瑞克

【问题讨论】:

  • 谢谢阿卜杜拉赫曼。我最终切换到 IdentityDbContext,然后使用 PM 启用此上下文的迁移并更新数据库。这会生成授权/身份验证表 :-) 然后我使用 PM enable-migrations 切换回 VehicleDBContext,这可能需要对数据库进行大多数更改。一切如你所说

标签: c# asp.net-mvc entity-framework ef-code-first forms-authentication


【解决方案1】:

您可以简单地拥有一个上下文,方法是让 VehicleDBContext 继承自 IdentityDbContext,并将自定义 DbSet 从 ApplicationDbContext 移动到它(如果有),然后相应地更新 Startup.cs。

如果您希望保留两个上下文,请使用 -ContextTypeName 命令开关,如下所示:

1) Enable-Migrations -ContextTypeName Namespace.ApplicationDbContext

这将创建一个 Configuration.cs 文件,重命名类(或更改为不同的命名空间)

2) Enable-Migrations -ContextTypeName Namespace.VehicleDbContext

然后,每当您为任一上下文添加新迁移时,请使用 -ConfigurationTypeName 指定配置文件:

Add-Migartion [NAME] -ConfigurationTypeName [Fully-qualified configration file name]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多