我有一个现有的DB上下文,到目前为止,它在EF配置下工作得很好,如下
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Configure Code First to ignore PluralizingTableName convention
// If you keep this convention then the generated tables will have pluralized names.
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>();
}
我按照MSDN的一篇文章扩展了MVC提供的身份模型,以链接到我现有的DB上下文中的一个人。
App User
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
public virtual Person LinkedPerson { get; set; }//My reference to existing person definition
}
上下文 public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public DbSet<Person> People { get; set; }
}
只要我不使用注册或登录功能,应用程序就可以工作。然而,一旦我注册为用户,我所有的模型现在都是复制的,一个是单数,另一个是复数形式。
我在哪里可以告诉MVC身份框架不重新创建多元表和使用现有的(单数)db对象?
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
不能用于标识表。因此需要显式解析:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Configure Code First to ignore PluralizingTableName convention
// If you keep this convention then the generated tables will have pluralized names.
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>();
modelBuilder.Entity<IdentityRole>().ToTable("AspNetRole");
modelBuilder.Entity<IdentityUserRole>().ToTable("AspNetUserRole");
modelBuilder.Entity<IdentityUserLogin>().ToTable("AspNetUserLogin");
modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaim");
modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUser");
}