ASP .NET - MVC 5 - Entity Framework - 代码优先 - 表单身份验证

ASP .NET - MVC 5 - Entity Framework - Code First - Forms Authentication

我继承了一个使用代码优先方法创建的 MVC 5 项目。该项目具有 authentication/authorization 的所有 classes(我们在这里称它们为 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 中),以及处理用户所在屏幕的 webapp 的功能部分输入数据等,通过 VehicleDBContext 访问数据库。

在 web.config 中有一个到 SQL 服务器的连接,名为 VehicleDBConnection,A/A 应该使用相同的上下文和连接,所以在 ApplicationDbContext 的构造函数中我设置了基础class 指向连接:

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

此时我检查了数据库,不支持 A/A,我的意思是没有 dbo.AspNetUsers 等表。因此,如果我尝试创建用户,则会显示错误页面 "Invalid object name 'dbo.AspNetUsers'"

我尝试按如下方式为 A/A 生成表格,但出现错误 b/c there are still 2 contexts:

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

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

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

提前谢谢你,

瑞克

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

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

1) Enable-Migrations -ContextTypeName Namespace.ApplicationDbContext

这将创建一个 Configuration.cs 文件,重命名 class(或更改为其他名称 space)

2) Enable-Migrations -ContextTypeName Namespace.VehicleDbContext

然后,每当您为任一上下文添加新迁移时,使用 -ConfigurationTypeName:

指定配置文件
Add-Migartion [NAME] -ConfigurationTypeName [Fully-qualified configration file name]