1

Я пытаюсь выяснить, установлен ли мой DBC-контекст. Веб-приложение, которое я пытаюсь сделать, это использовать ASP.NET 5, MVC6 и EF7.EF7 Неправильная настройка DBC-контекста?

Он подключен к базе данных, содержащей 3 таблицы (комментарий, обзор, фильм). Это моя модель

WebDbModel.cs

using Microsoft.AspNet.Identity.EntityFramework; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 

namespace WebExample.Models 
{ 
    public partial class Comment : IdentityUser 
    { 
     public string CommentId { get; set; } 
     public string ReviewId { get; set; } 
     public string Author { get; set; } 
     public System.DateTime Created { get; set; } 
    } 

    public partial class Review : IdentityUser 
    { 
     public string ReviewId { get; set; } 
     public string Name { get; set; } 
     public string Author { get; set; } 
     public string Creator { get; set; } 
     public string Status { get; set; } 
     public Nullable<System.DateTime> CreatedOn { get; set; } 
    } 

    public partial class Film : IdentityUser 
    { 
     public string ReviewId { get; set; } 
     public string FilmID { get; set; } 
     public string CommentId { get; set; } 
     public Nullable<int> CommentCount { get; set; } 
     public string FilmName { get; set; } 
     public virtual ICollection<Comment> Comments { get; set; } 
     public virtual Review Review { get; set; } 
    } 
} 

Тогда я класс по имени

RegistrationDbContext.cs

using Microsoft.AspNet.Identity.EntityFramework; 
using Microsoft.Data.Entity; 

namespace WebExample.Models 
{ 
    public class ApplicationUser : IdentityUser 
    { 
    } 

    public class RegistrationDbContext : IdentityDbContext<ApplicationUser> 
    { 
     protected override void OnModelCreating(ModelBuilder builder) 
     { 
      base.OnModelCreating(builder); 
      // Customize the ASP.NET Identity model and override the defaults if needed. 
      // For example, you can rename the ASP.NET Identity table names and more. 
      // Add your customizations after calling base.OnModelCreating(builder); 
     } 

     // Registration of the DB tables we are mapping. 
     public DbSet<Comment> Comments { get; set; } 
     public DbSet<Review> Reviews { get; set; } 
     public DbSet<Film> Films { get; set; } 
    } 
} 

I A m интересно отсюда, что такое использование public class ApplicationUser: IdentityUser Я не уверен, что я должен оставить его там ... Если я его удалю, то в моем Startup.cs следующий код будет жаловаться ...

// Add Identity services to the services container. 
services.AddIdentity<ApplicationUser, IdentityRole>() 
     .AddEntityFrameworkStores<RegistrationDbContext>() 
     .AddDefaultTokenProviders(); 

Так что я не знаю, что заменить его, учитывая тот факт меня комментарий, Обзор моделей и Film ...

Так что мой вопрос ... Я думаю, Я могу удалить класс ApplicationUser (автоматически генерируется, когда я создаю ed мое решение), поскольку это не часть моей модели вообще, но ... что я должен поставить вместо этого?

Не слишком уверен, что мой вопрос прав, хотя, поэтому извиняйтесь заранее! Это, казалось, сильно изменился по сравнению с MVC5, EF6 и я не мог нормально слишком много документации вокруг IdentityDbContext

Кроме того ... я пропускаю что-то еще в RegistrationDbContext.cs класса? Единственная дополнительная вещь, которую я добавил, это регистрация таблиц ... остальные поступили в класс по умолчанию.

Спасибо!

ответ

1

Здесь есть пара вопросов.

Во-первых, IdentityUser является представление вошедшего в систему пользователя на ваш сайт, и по умолчанию, представленного AspNetUsers таблицы в базе данных, и сохраняет все обычные вещи, как адрес электронной почты, пароль и т.д.

Предоставленный подкласс ApplicationUser есть в случае, если вы хотите каким-либо образом расширить его. Скажем, например, вы хотите хранить дату рождения пользователей:

public class ApplicationUser : IdentityUser 
{ 
    public DateTime DateOfBirth { get; set; } 
} 

Это будет лавировать на DateOfBirth колонки к AspNetUsers таблице.

В вашем случае, если вы не хотите каким-либо образом расширять таблицу пользователей по умолчанию, вы можете просто удалить класс ApplicationUser и заменить все ссылки на него в своем коде на IdentityUser.Например:

// Add Identity services to the services container. 
services.AddIdentity<IdentityUser, IdentityRole>() 
    .AddEntityFrameworkStores<RegistrationDbContext>() 
    .AddDefaultTokenProviders(); 

Во-вторых, ваши модели не должны наследоваться от IdentityUser. Это просто добавит все поля из таблицы AspNetUsers к каждой модели, что не имеет смысла, поэтому удалите : IdentityUser из своих моделей.

+0

Большое вам спасибо! Я больше понимаю логику! Да, вы были правы, мне не нужен класс ApplicationUser, поэтому я удалил его и ссылался на IdentityUser :) – user3587624

+0

BTW. Если у меня есть другой вопрос, который не связан с этим, я должен открыть новый, верно? – user3587624

+0

@ user3587624 Да, это так. Таким образом, у вас есть лучший шанс получить правильный ответ :) –

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