我正在使用EntityFramework6。我想将DbContext拆分为多个较小的对象。编辑:我有一个数据库要连接。
我将拥有一个DbContext,其中包含仅一个中央应用程序将使用的所有实体和迁移。其他应用程序将使用较小的DbContext而不进行迁移。
我发现我需要从IdentityDbContext继承所有DbContext,即使它们都不使用它。
internal class SmallerDbContext : IdentityDbContext<ApplicationUser,
ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
public DbContext<Entity1> NotInSmallerDbContext { get; set; }
public DbContext<Entity1> InSmallerDbContext { get; set; }
}
我希望这样:
internal class SmallerDbContext : System.Data.Entity.DbContext
{
public DbContext<Entity1> InSmallerDbContext { get; set; }
}
但这会产生以下错误:
Paris.DAL.Repo.DbContext.ApplicationUserLogin: : EntityType 'ApplicationUserLogin' has no key defined. Define the key for this EntityType.
Paris.DAL.Repo.DbContext.ApplicationUserRole: : EntityType 'ApplicationUserRole' has no key defined. Define the key for this EntityType.
ApplicationUserLogins: EntityType: EntitySet 'ApplicationUserLogins' is based on type 'ApplicationUserLogin' that has no keys defined.
ApplicationUserRoles: EntityType: EntitySet 'ApplicationUserRoles' is based on type 'ApplicationUserRole' that has no keys defined.
我试图将这些表添加到DbContext中,但无济于事。
public IDbSet<ApplicationUser> Users { get; set; }
public IDbSet<ApplicationRole> Roles { get; set; }
有什么方法可以创建不继承自IdentityDbContext的DbContext?
答案 0 :(得分:1)
通过将对象添加到DbContext,我走在正确的道路上。 您只需要添加两个,即User和UserLogin。其他不需要。
public DbSet<ApplicationUser> Users { get; set; }
public DbSet<ApplicationUserLogin> UserLogins { get; set; }
此外,您需要为两个对象都设置正确的表,并且需要添加一些虚拟属性,以便Entity Framework可以像处理其他任何类一样处理这些类型。
[Table("AspNetUsers")]
public class ApplicationUser : IdentityUser<int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
{
}
[Table("AspNetUserLogins")]
public class ApplicationUserLogin : IdentityUserLogin<int>
{
[Key, Column(Order = 0)]
public override string LoginProvider { get; set; }
[Key, Column(Order = 1)]
public override string ProviderKey { get; set; }
[Key, Column(Order = 2)]
public override int UserId { get; set; }
}
现在,您的DbContext不再需要从IdentityDbContext继承。