MVC5 DataContext最佳实践?

3
在MVC 5中,模型文件夹中有一个新的Identity Class。假设我向用户添加一些附加字段,我会在该类中进行如下操作:
```public class ApplicationUser : IdentityUser```
好的,到目前为止还不错。我运行 ```add-migration "updatedUser"```,这将更新数据库。
但是,现在我想添加一个Products、Client和Company Table。一些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; }
}

这是最佳实践还是我应该使用身份类?有关系吗?

1个回答

2

你为什么觉得你想要那样做呢?

因为ApplicationDbContext已经提供了你需要的功能,所以你并没有继承任何额外的东西。

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

另外,你不应该把你的DbSet放在ApplicationDbContext的构造函数中。


1
那么,你的立场是大部分时间你只需要一个数据上下文吗? - Robert Harvey
是的,那只是个打字错误,我已经修复了。我有点理解你的意思。但我还是有点困惑。我已经使用ApplicationDBContext来创建我的新表,很可能我会想要访问标识字段。但我没有考虑到无法从另一个上下文中访问它们。现在我想起来了,这很有道理。我对Identity中所有新方法的变化有些困惑,这些变化在过去几周内发生了(?)哈哈,大的变化(但我可以看到这是为了更好!) - Eric Bishard
@RobertHarvey - 我不会那么说。我会说,如果你不知道为什么需要多个上下文,那么你可能不需要。最大的两个原因是1)如果你想将应用程序数据存储在单独的数据库中,或者2)如果你有一个非常庞大的表集。 - Erik Funkenbusch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接