Я использую сначала код MVC5 + Ef6 с ASP.Net Identity 1.0 и хочу, чтобы таблицы были созданы в пользовательской схеме. то есть схемы, которая не является схемой dbo.
Я перевернул инженерную базу данных с помощью инструментов Ef power и установил имя схемы для всех других таблиц в классе сопоставления следующим
Я пытался сделать это для таблиц ASP.Net, но он все время давал мне массу ошибок, и в итоге я сдался.
Если я исключаю (обратные инженерные) таблицы ASP.Net Identity из моего проекта, они будут созданы, но всегда в схеме dbo
Ответ 2
Вот поздняя запись, объясняющая, что я сделал. Не уверен, есть ли лучший способ, но это ТОЛЬКО то, что сработало для меня.
Справедливости ради, у меня в моем контексте больше одной модели. Вот почему это было лучше для меня.
- Генерировать таблицы в базе данных раньше времени (в то время как таблицы все еще находятся в 'dbo')
- Выполните
add-migration
в своем проекте и создайте миграцию
- Измените все схемы в вашем коде перехода на желаемую схему
- Выполнить
update-database
, чтобы обновить эти изменения.
- Удалить исходный файл миграции (его хэш бесполезен для вас)
- Снова выполните
add-migration
и создайте новую миграцию
- Обновите метод
OnModelCreating
вашей конфигурации с помощью кода ниже
- Запустите приложение и начните регистрировать пользователей.
Примечание:
Вы НЕ хотите этого.
// This globally assigned a new schema for me (for ALL models)
modelBuilder.HasDefaultSchema("security");
КОНФИГУРАЦИЯ: OnModelCreating
Это назначало новую схему для ТОЛЬКО указанных таблиц
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUsers", "security");
modelBuilder.Entity<CustomRole>().ToTable("AspNetRoles", "security");
modelBuilder.Entity<CustomUserClaim>().ToTable("AspNetUserClaims", "security");
modelBuilder.Entity<CustomUserLogin>().ToTable("AspNetUserLogins", "security");
modelBuilder.Entity<CustomUserRole>().ToTable("AspNetUserRoles", "security");
}
НАЧАЛЬНАЯ МИГРАЦИЯ СМОТРЕТЬ КАК
public partial class Initial : DbMigration
{
public override void Up()
{
CreateTable(
"security.AspNetRoles",
c => new
{
Id = c.String(nullable: false, maxLength: 128),
Name = c.String(nullable: false, maxLength: 256),
})
.PrimaryKey(t => t.Id)
.Index(t => t.Name, unique: true, name: "RoleNameIndex");
CreateTable(
"security.AspNetUserRoles",
c => new
{
UserId = c.String(nullable: false, maxLength: 128),
RoleId = c.String(nullable: false, maxLength: 128),
})
.PrimaryKey(t => new { t.UserId, t.RoleId })
.ForeignKey("security.AspNetRoles", t => t.RoleId, cascadeDelete: true)
.ForeignKey("security.AspNetUsers", t => t.UserId, cascadeDelete: true)
.Index(t => t.UserId)
.Index(t => t.RoleId);
CreateTable(
"security.AspNetUsers",
c => new
{
Id = c.String(nullable: false, maxLength: 128),
FirstName = c.String(nullable: false, maxLength: 250),
LastName = c.String(nullable: false, maxLength: 250),
Email = c.String(maxLength: 256),
EmailConfirmed = c.Boolean(nullable: false),
PasswordHash = c.String(),
SecurityStamp = c.String(),
PhoneNumber = c.String(),
PhoneNumberConfirmed = c.Boolean(nullable: false),
TwoFactorEnabled = c.Boolean(nullable: false),
LockoutEndDateUtc = c.DateTime(),
LockoutEnabled = c.Boolean(nullable: false),
AccessFailedCount = c.Int(nullable: false),
UserName = c.String(nullable: false, maxLength: 256),
})
.PrimaryKey(t => t.Id)
.Index(t => t.UserName, unique: true, name: "UserNameIndex");
CreateTable(
"security.AspNetUserClaims",
c => new
{
Id = c.Int(nullable: false, identity: true),
UserId = c.String(nullable: false, maxLength: 128),
ClaimType = c.String(),
ClaimValue = c.String(),
})
.PrimaryKey(t => t.Id)
.ForeignKey("security.AspNetUsers", t => t.UserId, cascadeDelete: true)
.Index(t => t.UserId);
CreateTable(
"security.AspNetUserLogins",
c => new
{
LoginProvider = c.String(nullable: false, maxLength: 128),
ProviderKey = c.String(nullable: false, maxLength: 128),
UserId = c.String(nullable: false, maxLength: 128),
})
.PrimaryKey(t => new { t.LoginProvider, t.ProviderKey, t.UserId })
.ForeignKey("security.AspNetUsers", t => t.UserId, cascadeDelete: true)
.Index(t => t.UserId);
}
public override void Down()
{
DropForeignKey("security.AspNetUserRoles", "UserId", "security.AspNetUsers");
DropForeignKey("security.AspNetUserLogins", "UserId", "security.AspNetUsers");
DropForeignKey("security.AspNetUserClaims", "UserId", "security.AspNetUsers");
DropForeignKey("security.AspNetUserRoles", "RoleId", "security.AspNetRoles");
DropIndex("security.AspNetUserLogins", new[] { "UserId" });
DropIndex("security.AspNetUserClaims", new[] { "UserId" });
DropIndex("security.AspNetUsers", "UserNameIndex");
DropIndex("security.AspNetUserRoles", new[] { "RoleId" });
DropIndex("security.AspNetUserRoles", new[] { "UserId" });
DropIndex("security.AspNetRoles", "RoleNameIndex");
DropTable("security.AspNetUserLogins");
DropTable("security.AspNetUserClaims");
DropTable("security.AspNetUsers");
DropTable("security.AspNetUserRoles");
DropTable("security.AspNetRoles");
}
}