MVC5 DataContext最佳实践?

时间:2014-05-06 03:14:07

标签: c# asp.net sql-server asp.net-mvc-5 asp.net-identity

在MVC 5中,models文件夹中有一个新的Identity Class。所以我要说我向用户添加了一些额外的字段,我会在课堂上这样做

public class ApplicationUser : IdentityUser

好的,到目前为止一切顺利。我运行add-migration "updatedUser",这将更新数据库。

但是......现在我要添加产品,客户和公司表。现在,一些ASP.NET教程和Azure教程实际上让我为ApplicationDbContext类中的每个Table设置了getter和setter:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

        public DbSet<Product> Products { get; set; }
        public DbSet<Client> Clients { get; set; }
        public DbSet<Company> Companies { get; set; }

        public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

但我认为你不想从IdentityDbContext继承,而是在models文件夹中设置一个名为的文件:

DatabaseContext.cs(对于非用户/身份表)

并执行以下操作:

    using MyProject.Domain.Entities;
    using System.Data.Entity;
    namespace MyProject.Models {

    public class DatabaseContext : DbContext 
        : base("DefaultConnection")
    {
    }

     public DbSet<Product> Products { get; set; }
     public DbSet<Client> Clients { get; set; }
     public DbSet<Company> Companies { get; set; }
}

这是最佳做法还是应该使用Identity Class?这有关系吗?

1 个答案:

答案 0 :(得分:2)

为什么你认为你会这样做?

由于提供了ApplicationDbContext,您不会继承任何您尚未执行的操作。

在某些情况下添加第二个上下文可能有意义,但是您可能希望访问Identity字段,如果您使用的是其他上下文,则可能会遇到上下文一致性问题。

而且,FYI,你没有把你的DbSet放在ApplicationDbContext的构造函数中。