Asp.net core mvc 为什么ControllerScaffolding需要一个具有单独用户帐户的项目
我试图通过以下方式了解ASP.NET核心是如何工作的。它正确地指定,如果我希望能够利用控制器支架的功能,我必须创建一个项目,并将身份验证指定为单个用户帐户 执行此操作时,除其他事项外,它还将生成以下类:Asp.net core mvc 为什么ControllerScaffolding需要一个具有单独用户帐户的项目,asp.net-core-mvc,asp.net-mvc-scaffolding,Asp.net Core Mvc,Asp.net Mvc Scaffolding,我试图通过以下方式了解ASP.NET核心是如何工作的。它正确地指定,如果我希望能够利用控制器支架的功能,我必须创建一个项目,并将身份验证指定为单个用户帐户 执行此操作时,除其他事项外,它还将生成以下类:ApplicationDbContext:IdentityDbContext。经过几级继承后,它继承了DbContext 如果我想使用DbContext,为什么我必须从IdentityDbContext继承而不能简单地继承DbContext 是否可以使用我自己的身份验证结构,并且仍然能够使用控制器
ApplicationDbContext:IdentityDbContext
。经过几级继承后,它继承了DbContext
如果我想使用DbContext,为什么我必须从IdentityDbContext继承而不能简单地继承DbContext
是否可以使用我自己的身份验证结构,并且仍然能够使用控制器脚手架?我只是尝试了一下,您可以脚手架控制器,但首先需要手动挂钩一些东西。在理解事情必须如何设置时,这可能很方便
- 从一个新的MVC项目开始,选择“无身份验证”,这样它就不会创建IdentityContext
- 然后将EF Core和scaffolding所需的依赖项添加到您的project.json中:
"dependencies": { ... //EF Core "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0", "Microsoft.EntityFrameworkCore.Tools": { "version": "1.0.0-preview2-final", "type": "build" }, //Scaffolding "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { "version": "1.0.0-preview2-final", "type": "build" }, "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": { "version": "1.0.0-preview2-final", "type": "build" } }, "tools": { ... // EF Core "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final", //Scaffolding "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { "version": "1.0.0-preview2-final", "imports": [ "portable-net45+win8" ] } },
- 创建要使用的模型类,例如:
public class Customer { public int CustomerId { get; set; } [Required] public string Email { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
public class FooContext: DbContext { public FooContext(DbContextOptions<FooContext> options) : base(options) { } }
- 现在创建一个新的空
类,例如:DBContext
public class Customer { public int CustomerId { get; set; } [Required] public string Email { get; set; } public string FirstName { get; set; } public string LastName { get; set; } }
public class FooContext: DbContext { public FooContext(DbContextOptions<FooContext> options) : base(options) { } }
- 在appsettings.json中还需要一个连接字符串。如果启动新项目,可以使用localdb添加一个:
"Data": { "FooContext": { "ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=FooContext-d69c2d45-f845-4069-92ed-2486567146cb;Trusted_Connection=True;MultipleActiveResultSets=true" } }
- 使用localdb时,可以通过添加初始迁移和更新数据库来创建数据库。从项目根目录运行以下命令:
dotnet ef migrations add initial dotnet ef database update
- 然后,您可以右键单击Controllers文件夹,选择Add->Controller并使用“使用实体框架查看MVC控制器”选项。选择模型和上下文类后,脚手架将为您生成所有内容
- 您还可以避免手动创建DBContext类,让脚手架为您生成它。只需在同一个scaffolding对话框中选择NewDBContext类,它将创建上下文类,将连接字符串添加到appsettings.json并更新
。(您仍然需要创建数据库,例如添加并运行初始迁移)Startup.ConfigureServices
/customers
,并看到一个空列表不过还有一件事强>
- 搭建的编辑/创建视图依赖名为\u validationscriptsparial的部分来添加不引人注目的验证脚本,由于它不存在于新项目中,编辑/创建视图将抛出错误
- 您需要手动创建一个新的局部视图
,其中包含以下内容:~/Views/Shared/_validationscripttial.cshtml
<environment names="Development"> <script src="~/lib/jquery-validation/dist/jquery.validate.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script> </environment> <environment names="Staging,Production"> <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.14.0/jquery.validate.min.js" asp-fallback-src="~/lib/jquery-validation/dist/jquery.validate.min.js" asp-fallback-test="window.jQuery && window.jQuery.validator"> </script> <script src="https://ajax.aspnetcdn.com/ajax/jquery.validation.unobtrusive/3.2.6/jquery.validate.unobtrusive.min.js" asp-fallback-src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js" asp-fallback-test="window.jQuery && window.jQuery.validator && window.jQuery.validator.unobtrusive"> </script> </environment>