EntityFramework中的MVC5 Identity+多个上下文



我有一个MVC 5应用程序,它使用默认身份验证。用户配置文件是我们模型的一部分,这意味着有几个类具有UserInfo的外键。有两个DbContext,一个用于模型,另一个用于UserInfo。

 public class ApplicationDbContext : IdentityDbContext<UserInfo>
    {
        public ApplicationDbContext()
            : base("Profile")
        {
        }
    }

 public class UserInfo : IdentityUser
        {
            public UserInfo ()
            {
                LibraryItems = new List<LibraryItem>();
                if (UserGroup == UserGroupEnum.ANALYST)
                {
                    Companies = new List<Company>();
                }
                DateCreate = DateTime.Now;
                DateUpdate = DateTime.Now;
                DateDelete = DateTime.Now;
            }
            [DisplayColumnInIndex]
            [DisplayName("Is Active ?")]
            public bool IsActive { get; set; }
            [Timestamp]
            public byte[] RowVersion { get; set; }
            //[ValidateFile(ErrorMessage = "Please select a PNG image smaller than 1MB")]
            //[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
            [Editable(false, AllowInitialValue = true)]
            public DateTime DateCreate { get; set; }
            //[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
            public DateTime DateUpdate { get; set; }
            //[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
            public DateTime DateDelete { get; set; }
            [DisplayColumnInIndex]
            public String Name { get; set; }
            [DisplayColumnInIndex]
            public String FirstName { get; set; }
            [DisplayColumnInIndex]
            public String Pseudo { get; set; }
            [DisplayColumnInIndex]
            public string PhoneNumber { get; set; }
            [DisplayColumnInIndex]
            public String Company { get; set; }
            [DisplayName("Name_Id")]
            [ForeignKey("FullName")]
            public int? NameId { get; set; }
            [DisplayColumnInIndex]
            public UserGroupEnum UserGroup { get; set; }
            [DisplayColumnInIndex]
            public UserStatusEnum UserStatus { get; set; }
            public virtual Name FullName { get; set; }
    }

public class Comment
{
       // more properties
        [DisplayName("UserInfoId")]
        [ForeignKey("UserInfo")]
        public virtual String UserInfoId { get; set; }
}
public class Like
{
      // more properties
        [DisplayName("UserInfoId")]
        [ForeignKey("UserInfo")]
        public virtual String UserInfoId { get; set; }
}

我的userInfo还有第二个DBontext的其他表的外键。

设计我们的身份验证系统的最佳方式是什么?并保持这两个语境之间的关系。

提前谢谢。

我最近提出的解决方案是对ASP.NET身份数据和业务实体使用单一上下文:

public class DatabaseContext : IdentityDbContext<UserInfo>
{
    public virtual DbSet<Comment> Comments { get; set; } // Your business entities
    public DatabaseContext()
        : base("name=DatabaseContext")
    {
    }
}

请注意,DatabaseContext继承自IdentityDbContext<UserInfo>

这种方法有一些折衷:例如,您的数据访问层应该引用Microsoft.AspNet.Identity.CoreMicrosoft.AspNet.Identity.EntityFramework;但是,如果您使用依赖项注入或实体框架迁移,那么在项目中使用单个数据库上下文会使事情变得更容易。

相关内容

  • 没有找到相关文章