Dan*_*per 6 c# entity-framework asp.net-identity ef-fluent-api
我正在尝试使用Identity Framework Core配置多租户应用程序.
我已成功创建了一个自定义ApplicationUser,使用TenantId覆盖IdentityUser,使用以下说明:https://www.scottbrady91.com/ASPNET-Identity/Quick-and-Easy-ASPNET-Identity-Multitenancy (这些说明不适用于Identity Framework核心,但他们帮助).
我在创建数据库表时陷入困境.
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Models.User>(entity =>
{
entity.HasIndex(a => new { a.NormalizedUserName, a.TenantId }).HasName("UserNameIndex").IsUnique();
});
}
Run Code Online (Sandbox Code Playgroud)
我的意图是替换base.OnModelCreating()中定义的UserNameIndex,以便它是两列而不仅仅是NormalizedUsername的索引.但这只会导致错误:
'User'上的索引{'NormalizedUserName','TenantId'}和'User'上的{'NormalizedUserName'}都映射到'Security.AspNetUser.UserNameIndex'但具有不同的列({'NormalizedUserName','TenantId'}和{'NormalizedUserName'}).
显然我想在我在代码中添加它之前撤消在base.OnModelCreating()调用中创建的索引,但是找不到这样做的方法.
有没有办法从ModelBuilder中删除已在模型创建链中进一步创建的索引?
Dan*_*per 14
我在https://github.com/aspnet/EntityFrameworkCore/issues/6239的帮助下找到了解决方案
您可以使用MetaData.RemoveIndex()删除已存在的索引
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<Models.User>(entity =>
{
// Added these two lines
var index = b.HasIndex(u => new { u.NormalizedUserName }).Metadata;
b.Metadata.RemoveIndex(index.Properties);
entity.HasIndex(a => new { a.NormalizedUserName, a.TenantId }).HasName("UserNameIndex").IsUnique();
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
775 次 |
| 最近记录: |