【问题标题】:Asp Identity and Application Specific ModelsAsp 身份和应用程序特定模型
【发布时间】:2015-02-15 19:47:07
【问题描述】:

我刚刚开始了一个使用 ASP .Net Identity 2 的新项目。它为 Identity 表生成了一个开箱即用的数据库,这很好。我的困惑是我应该把我的应用程序特定的表放在哪里?我是为它们创建一个完全独立的 DbContext 和数据库,还是最好将所有表简单地捆绑到一个数据库中?

谢谢

【问题讨论】:

    标签: c# asp.net-mvc asp.net-identity


    【解决方案1】:

    如果您使用的是 asp.net MVC5 身份 2,则 ApplicationDbContext 已经存在于 IdentityModels.cs 中。所以您可以使用它。

       public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
       {
        public ApplicationDbContext()
            : base("ApplicationDbContext", throwIfV1Schema: false)
        {
        }
    
        public DbSet<Department> Departments { get; set; }
    
        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();
        }
       }
    

    【讨论】:

    • 但这是最佳实践吗?我倾向于将两者分开的想法。这似乎是一个更清洁的解决方案。
    • 我不确定这是否是最佳做法。请查看此链接stackoverflow.com/a/19904081/1388900
    • @James 您当然可以保留 2 个上下文,但这会增加代码的开销。迁移变得更加困难,您只需维护更多代码。如果您有将身份上下文分开的好处,那么就这样做,否则只有一个上下文。
    • 将 ApplicationUser 移动到我的域层似乎是使用一个上下文的主要障碍,因为它继承自 IdentityUser。这将要求我的域层有一个对 Microsoft.AspNet.Identity 的引用,这在我看来是不正确的。如果我使用两个单独的数据库,则不会出现此问题。
    【解决方案2】:

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

    public class BlogContext : IdentityDbContext<ApplicationUser>
    {
      public BlogContext()
        : base("BlogConnection")
      {
      }
    
      public DbSet<Post> Posts { get; set; }
      public DbSet<Comment> Comments { get; set; }
    }
    

    在某些极端情况下,最好将您的应用程序数据与 Identity 持有的数据分开。一种情况可能是您的应用程序数据与您的用户数据不相关并且您希望将它们分开。不过,在为您的应用程序数据创建单独的上下文时,您应该记住,您必须处理两个上下文,这有时会很痛苦。

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2017-01-07
      相关资源
      最近更新 更多