2016-12-02 4 views
2

Я пытаюсь понять, как работает ASP.NET Core, следуя this tutorial. Он правильно указывает, что, если я хочу, чтобы иметь возможность использовать мощность контрольных лесов, мне нужно создать проект и указать Аутентификация как индивидуальные учетные записи пользователей.Почему для лесов с контроллерами требуется проект с отдельными учетными записями пользователей

При этом, помимо прочего, он будет генерировать этот класс: ApplicationDbContext : IdentityDbContext<ApplicationUser>. После нескольких уровней наследования он наследует DbContext.

Если я хочу использовать DbContext, почему я вынужден наследовать от IdentityDbContext и не могу просто наследовать DbContext?

Возможно ли использовать мои собственные структуры аутентификации и по-прежнему работать с контроллерами?

ответ

2

Я только что попробовал, и вы можете подкрасить контроллер, но сначала вам нужно вручную перехватить несколько вещей. intro to EF Core может пригодиться в понимании того, как все должно быть настроено.

  • Начать с новым проектом MVC, и выберите пункт Без проверки подлинности поэтому он не создает IdentityContext.
  • Затем добавьте к вашему project.json зависимостей, необходимых как для EF Ядра и подмости:

    "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; }   
    } 
    
  • Теперь создайте новый пустой класс DBContext, например:

    public class FooContext: DbContext 
    { 
        public FooContext(DbContextOptions<FooContext> options) : base(options) 
        { 
        } 
    } 
    
  • Затем обновите Startup.ConfigureServices с контекстом классом:

    services.AddDbContext<FooContext>(options => 
         options.UseSqlServer(Configuration["Data:FooContext:ConnectionString"])); 
    
  • Кроме того, необходима строка подключения в вашем 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, выберите Добавить -> Контроллер и использовать «MVC контроллер с представлениями с помощью Entity Framework» вариант. После выбора классов модели и контекста строительные леса будут генерировать все для вас.
  • Вы также можете избежать создания класса DBContext вручную и создать для него строительные леса.Просто выберите новый класс DBContext в том же диалоге лесов и он создаст класс контекста, добавит строку подключения в appsettings.json и обновит Startup.ConfigureServices. (Вы все еще будете необходимо создать базу данных, например, добавление и запуск начальную миграции)

Если запустить проект, вы увидите, что вы можете перемещаться к сгенерированной индексной странице, как /customers увидеть пустой список , Есть еще одна вещь!

  • scaffolded редактировать/создавать мнения опираются на частичное имени _ValidationScriptsPartial для добавления сценариев ненавязчивые проверки, и, поскольку он не существует в новом проекте, то редактировать/создавать вид будет сгенерировано сообщение об ошибке.
  • Вам нужно будет вручную создать новый частичный вид ~/Views/Shared/_ValidationScriptsPartial.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> 
    
+0

Благодарим Вас за время, чтобы объяснить, шаг за шагом. – Alexei

+0

Не беспокойтесь, это был интересный вопрос! –

 Смежные вопросы

  • Нет связанных вопросов^_^