【发布时间】: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