C# DbContexts导致错误的问题

C# DbContexts导致错误的问题,c#,entity-framework,asp.net-identity,C#,Entity Framework,Asp.net Identity,我目前有多个具有多个DBContext的项目: 项目(DbContext): 模型 DataAccessLayer(EntityContext) 服务层 网站(IdentityContext) 我在模型的项目中有一个名为Department的模型,它是由EntityContext创建的,我在Web项目的ApplicationUser.cs中引用了它 当IdentityContext尝试创建AspNet表时,它也尝试重新创建Department表,我得到以下错误: “数据库中已存在名为“Dep

我目前有多个具有多个DBContext的项目:

项目(DbContext):

  • 模型
  • DataAccessLayer(EntityContext)
  • 服务层
  • 网站(IdentityContext)
我在模型的项目中有一个名为Department的模型,它是由EntityContext创建的,我在Web项目的ApplicationUser.cs中引用了它

当IdentityContext尝试创建AspNet表时,它也尝试重新创建Department表,我得到以下错误:

“数据库中已存在名为“Departments”的对象。”

这是我的身份文件:

IdentityContext是我的Web项目:
ApplicationDbContext.cs

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext() : base("EntityContext", throwIfV1Schema: false)
    {
        Configuration.LazyLoadingEnabled = false;
        Configuration.AutoDetectChangesEnabled = false;
        Configuration.ProxyCreationEnabled = false;
        Configuration.ValidateOnSaveEnabled = false;
    }

    static ApplicationDbContext()
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<ApplicationDbContext, ApplicationDbInitializer>());
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}
public类ApplicationDbContext:IdentityDbContext
{
public ApplicationDbContext():base(“EntityContext”,throwifvv1schema:false)
{
Configuration.LazyLoadingEnabled=false;
Configuration.AutoDetectChangesEnabled=false;
Configuration.ProxyCreationEnabled=false;
Configuration.ValidateOnSaveEnabled=false;
}
静态ApplicationDbContext()
{
SetInitializer(新的MigrateDatabaseToLatestVersion());
}
公共静态应用程序上下文创建()
{
返回新的ApplicationDbContext();
}
}
ApplicationBinInitializer.cs

public class ApplicationDbInitializer : DbMigrationsConfiguration<ApplicationDbContext>
{
    public ApplicationDbInitializer()
    {
        AutomaticMigrationsEnabled = false;

        #if DEBUG
        AutomaticMigrationDataLossAllowed = true;
        AutomaticMigrationsEnabled = true;
        #endif
    }

    protected override void Seed(ApplicationDbContext context)
    {
        base.Seed(context);
    }
公共类应用程序BInitializer:Dmbigrations配置
{
公共应用程序BInitializer()
{
AutomaticMiggerationsEnabled=假;
#如果调试
AutomaticMigrationDataLossAllowed=true;
AutomaticMiggerationsEnabled=真;
#恩迪夫
}
受保护的重写无效种子(ApplicationDbContext上下文)
{
种子(上下文);
}
ApplicationUser.cs

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        return userIdentity;
    }

    /// <summary>
    /// Linked Department Id
    /// </summary>
    public Guid? DepartmentId { get; set; }

    /// <summary>
    /// Linked Department Object
    /// </summary>
    [ForeignKey("DepartmentId")]
    public virtual Department Department { get; set; }
}
公共类应用程序用户:IdentityUser
{
公共异步任务GenerateUserIdentityAsync(用户管理器)
{
var userIdentity=wait manager.CreateIdentityAsync(这是DefaultAuthenticationTypes.ApplicationOkie);
返回用户身份;
}
/// 
///链接部门Id
/// 
公共Guid?部门ID{get;set;}
/// 
///链接部门对象
/// 
[外键(“部门ID”)]
公共虚拟部门部门{get;set;}
}
然后,我在EntityContext中注释掉了“public DbSet Department{get;set;}”,现在它已经生成了,但是当我尝试访问它时,我得到了以下错误:

“实体类型部门不是当前上下文模型的一部分。”


我理解这两个错误,但我不知道如何让它们位于同一个上下文中,因为它们位于不同的项目中。

传统上,在这种情况下,我希望您将DataAccessLayer中的上下文设置为IdentityContext。因为IdentityContext与特定上下文之间存在联系,它为您提供了表示应用程序的单个上下文,而不引入共享上下文问题

这将导致从web项目中删除DBContext,并将DataAccessLayer中的上下文基类更改为
IdentityDbContext
,而不是当前的DBContext基类

最有可能的是,这将导致您将一些实体移动到较低的DLL中,但这同样会使该DLL更能代表整个解决方案。

可能的重复项