c# - MVC5 DataContext 最佳实践?

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

在 MVC 5 中,模型文件夹中有一个新的身份类。所以假设我向用户添加了一些额外的字段,我会在类里面这样做

公共(public)类 ApplicationUser : IdentityUser

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

但是...现在我想添加一个产品、客户和公司表。现在,一些 ASP.NET 教程和 Azure 教程实际上让我为 ApplicationDbContext 类中的每个表设置 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 继承,而是在模型文件夹中设置一个名为:

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

这是最佳实践还是我应该使用标识类?重要吗?

最佳答案

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

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

在某些情况下添加第二个上下文可能有意义,但您可能想要访问身份字段,如果您使用不同的上下文,那么您可能会遇到上下文一致性问题。

并且,仅供引用,您没有将 DbSet 放入 ApplicationDbContext 的构造函数中。

关于c# - MVC5 DataContext 最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23485396/

相关文章:

Sql Server - 在查询中选择逻辑结果

c# - 如何在不断检查进度的同时在 ASP.NET 4 中异步加载页面?

c# - 在 asp.net 中使用 ajax 访问 C# 方法?

c# - Entity Framework 在调用 INSERT 之前加载所有行

c# - KnockoutMVC 提交按钮不起作用

c# - 如果用户未通过身份验证,请转到登录页面

ASP.NET - 从 PDF 表单字段收集用户输入

sql-server - SQL Server 导入向导不支持从超过 255 列的 Excel 工作表导入

c# - DataGridView:查找 ColumnHeaders 是否真的可见

sql-server - 如何在 SQL 中查找一个表中与另一个表中匹配的行组?