我继承了一个使用代码优先方法创建的 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 中),以及处理用户输入数据等屏幕的 webapp 的功能部分,通过访问数据库车辆数据库上下文。
在 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> Enable-Migrations 在程序集中发现不止一种上下文类型
我更喜欢只有 1 个上下文,但如果这意味着登录自动生成的代码发生重大变化,最好保留 2 个单独的上下文,只要它们指向同一个连接。
如何将自动生成的 A/A 支持数据库表、存储过程等自动生成到现有数据库中,而不影响其他应用程序类的迁移?
先感谢您,
瑞克
您可以通过使 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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句