gpt4 book ai didi

c# - MVC5 Identity + EntityFramework 中的多个上下文

转载 作者:行者123 更新时间:2023-12-02 14:01:00 24 4
gpt4 key购买 nike

我有一个 MVC 5 应用程序,它使用默认身份验证。用户配置文件是我们模型的一部分,这意味着有几个类具有 UserInfo 的外键。有 2 个 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 ;但是,如果您使用依赖项注入(inject)或 Entity Framework 迁移,那么在项目中拥有单个数据库上下文会使事情变得更加容易。

关于c# - MVC5 Identity + EntityFramework 中的多个上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26807810/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com