EF7 DBContext的配置不正确?

时间:2015-12-09 05:24:31

标签: c# asp.net asp.net-mvc entity-framework entity-framework-core

我想知道我的DBContext是否设置正确。我试图做的Web应用程序是使用ASP.NET 5,MVC6和EF7。

它连接到包含3个表格的DB(评论,评论,电影)。这是我的模特

  

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; }
    }
}

我想知道公共类ApplicationUser:IdentityUser 的用途是什么 我不确定我是否应该把它留在那里......如果我删除它,那么在我的Startup.cs中,以下代码会抱怨......

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

所以我不知道是什么取代它,因为我有评论评论电影模型...

所以我的问题是......我想我可以删除ApplicationUser类(当我创建我的解决方案时自动生成),因为这根本不是我模型的一部分,但是......我应该把它放在哪里呢?

不太确定我的问题是否正确,所以请提前道歉!与MVC5,EF6相比,这似乎发生了很大变化,而且我无法在 IdentityDbContext

周围编写太多文档。

另外......我在 RegistrationDbContext.cs 课程中遗漏了其他内容吗?我添加的唯一额外的东西是表的注册......其余的都是默认的类。

谢谢!

1 个答案:

答案 0 :(得分: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