我有一个问题,我一直在努力。我将不胜感激任何帮助
所以,我有一个首先使用Code的应用程序。对于身份验证,我使用Asp.Net Identity 2.0.1。所以我有一个User类来自Identity User,如下所示:
public class User: IdentityUser
{
public virtual UserInfo UserInfo { get; set; }
public virtual Organization Organization { get; set; }
}
然后我将我的上下文定义为:
public class IdentityContext: IdentityDbContext<User>
{
public IdentityContext(): base("Name=IdentityContext")
{
}
static IdentityContext()
{
Database.SetInitializer<IdentityContext>(new CreateDatabaseIfNotExists<IdentityContext>());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Configurations.Add(new UserMap());
modelBuilder.Configurations.Add(new UserInfoMap());
}
}
然后我使用此上下文启用迁移。由于Organization类链接到User,因此它也会添加到迁移中。但我不希望这样,因为它与Identity类不同。我的组织课程如下:
public partial class Organization: EntityBase
{
public Organization()
{
this.Users = new List<User>();
}
public int OrganizationId { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public virtual ICollection<User> Users { get; set; }
}
它派生自EntityBase,而不是来自IdentityUser类,并且处理方式不同。
我能做的是通过不同的上下文来处理我的所有非身份类,比如说AppContext可以定义为:
public class AppContext: DbContextBase
{
public AppContext(): base("Name=IdentityContext")
{
}
static AppContext()
{
Database.SetInitializer<AppContext>(new CreateDatabaseIfNotExists<AppContext>());
}
public new IDbSet<T> Set<T>() where T : class
{
return base.Set<T>();
}
protected override void OnModelCreating(DbModelBuilder builder)
{
builder.Configurations.Add(new OrganizationMap());
}
}
然后为此上下文启用第二次迁移。
但是,当我启用第二次迁移时,它会失败,除了&#34;迁移已经在项目&#39;数据存储区中启用了。要覆盖现有迁移配置,请使用-Force参数。&#34;。虽然它仍然为第二次迁移创建配置文件。
因此,当我尝试为此配置添加迁移时,它会抱怨以下内容:
在模型生成期间检测到一个或多个验证错误:
Datastore.IdentityUserLogin :: EntityType&#39; IdentityUserLogin&#39;没有 键定义。定义此EntityType的密钥。
Datastore.IdentityUserRole :: EntityType&#39; IdentityUserRole&#39;没有钥匙 定义。定义此EntityType的键。
Datastore.UserInfo :: EntityType&#39; UserInfo&#39;没有定义键。为此定义密钥 的EntityType。
IdentityUserLogins:EntityType:EntitySet&#39; IdentityUserLogins&#39;基于类型&gt;&#39; IdentityUserLogin&#39;没有&gt;键定义。
IdentityUserRoles:EntityType:EntitySet&#39; IdentityUserRoles&#39;基于类型&gt;&#39; IdentityUserRole&#39;没有 键定义。
UserInfoes:EntityType:EntitySet&#39; UserInfoes&#39;基于类型&#39; UserInfo&#39;没有&gt;键定义。
我不知道怎么解决这个问题?任何帮助都非常感谢
答案 0 :(得分:0)
我们的想法是使用IdentityDbContext继承AppContext。 IdentityDbContext本身继承自DbContext,因此它具有DbContext可用的所有功能以及Asp.Net Identity框架的额外配置要求