为实体框架提供两个dbcontext文件会给我带来问题

时间:2015-05-05 04:05:38

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

我的最终目标是与AspNetUsers'建立关系。如下图所示。只是代替“地址”而不是“地址”。我的实体是' YogaSpace'。 enter image description here

这是我遇到问题的地方。这是我到目前为止所做的。 首先,我在下面看到的两个实体中创建了属性。

public class ApplicationUser : IdentityUser
{
    //code here left out
    public virtual ICollection<YogaSpace> YogaSpaces { get; set; }
    //code here left out
}

public class YogaSpace
{
    // all other code left out to save space
    public virtual ApplicationUser User { get; set; }
}

现在我在包管理器中更新我的数据库,并收到下面显示的错误消息。它说我没有为某些实体定义密钥。 enter image description here

所以我用Google搜索并将下面的代码添加到下面的YogaBandyContext.cs文件中。 *注意 - 这是我的DataAccess程序集

namespace YogaBandy.DataAccess.Context
{
public class YogaBandyContext : DbContext
{
    public YogaBandyContext()
        : base("name=YogaBandyDatabase")
    {
    }

    //}
    // code left out here to save space
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
        modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
        modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
    }
}

}

我更新了数据库,发生了 NOTHING 。然后我意识到我在&#39; IdentityModel.cs&#39;中有另一个dbcontext类。此文件已创建,随Asp.Net MVC 5应用程序一起提供。 我从主要大会转移到包含所有我的域类的大会这是IdentityModel.cs,它位于&#39; DomainClasses&#39;部件。

namespace YogaBandy.DomainClasses.Models
{
public class ApplicationUser : IdentityUser
{
    //other members here left out to save space
    public virtual ICollection<YogaSpace> YogaSpaces { get; set; }

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

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

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
        modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
        modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId });
    }
}

}

我尝试再次更新数据库,没有运气。我仍然得到没有定义键的错误。

问题 - 那么我在创建AspNetUsers的引用时遇到问题,为什么我无法创建必要的密钥?是因为我有两个上下文文件,它们位于两个不属于asp.net mvc 5项目的程序集中,它们位于库中。我查看了我的数据库,看起来已经为下面显示的这些实体定义了键,对吧?那到底是怎么回事? enter image description here

0 个答案:

没有答案