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]
我继承了一个使用代码优先方法创建的 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]