Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp标识和特定于应用程序的模型_C#_Asp.net Mvc_Asp.net Identity - Fatal编程技术网

C# Asp标识和特定于应用程序的模型

C# Asp标识和特定于应用程序的模型,c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,我刚刚开始一个使用ASP.NETIdentity 2的新项目。它为标识表生成一个现成的数据库,这很好。我的困惑是我应该把应用程序特定的表放在哪里?我是为它们创建一个完全独立的DbContext&数据库,还是将所有表捆绑到一个数据库中是最佳做法 谢谢通常,您会扩展该类,并将特定于应用程序的表放到该上下文中。这看起来类似于以下内容 public class BlogContext : IdentityDbContext<ApplicationUser> { public BlogCo

我刚刚开始一个使用ASP.NETIdentity 2的新项目。它为标识表生成一个现成的数据库,这很好。我的困惑是我应该把应用程序特定的表放在哪里?我是为它们创建一个完全独立的DbContext&数据库,还是将所有表捆绑到一个数据库中是最佳做法


谢谢

通常,您会扩展该类,并将特定于应用程序的表放到该上下文中。这看起来类似于以下内容

public class BlogContext : IdentityDbContext<ApplicationUser>
{
  public BlogContext()
    : base("BlogConnection")
  {
  }

  public DbSet<Post> Posts { get; set; }
  public DbSet<Comment> Comments { get; set; }
}
公共类BlogContext:IdentityDbContext
{
公共博客上下文()
:base(“博客连接”)
{
}
公共DbSet Posts{get;set;}
公共DbSet注释{get;set;}
}

在一些边缘情况下,最好通过标识将应用程序数据与所持有的数据分开。一种情况可能是,应用程序数据与用户数据无关,您希望将它们分开。尽管如此,在为应用程序数据创建单独的上下文时,您应该记住,您必须处理两个上下文,这有时会很痛苦。

如果您使用的是asp.net MVC5 identity 2,则IdentityModels.cs中已经存在ApplicationDbContext。因此您可以使用它

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

    public DbSet<Department> Departments { get; set; }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
   }
public类ApplicationDbContext:IdentityDbContext
{
公共应用程序上下文()
:base(“ApplicationDbContext”,throwifvv1schema:false)
{
}
公共数据库集部门{get;set;}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}

但这是最佳做法吗?我倾向于把两者分开。这似乎是一个更干净的解决方案。我不确定这是否是最佳做法。请检查此链接@James您当然可以保留2个上下文,但这会增加代码的开销。迁移变得越来越困难,您只需要维护更多的代码。如果您有将标识上下文分开的好处,那么就这样做,否则只有一个上下文。将ApplicationUser移动到我的域层似乎是使用从IdentityUser继承的一个上下文的主要障碍。这将要求我的域层具有对Microsoft.AspNet.Identity的引用,这在我看来是不正确的。如果使用两个独立的数据库,则不会出现此问题。