我正在尝试使用Identity Framework Core配置多租户应用程序。
我已经成功创建了一个自定义应用程序器,以使用说明使用说明:https://www.scottbrady91.com/aspnet-indentity/quick-andimity/quick-and----------------------------------- assy-sideity-multitenancy(这些是这些说明不是指示)对于身份框架核心,但它们有所帮助)。
我被困在创建数据库表的点。
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();
});
}
我的意图是替换在base.onmodelCreating()中定义的用户名(),以便它是两列上的索引,而不仅仅是归一化usernizedUsername。但这只是导致错误:
"用户"上的索引{'normalizedUsername','tenantid'}和{'normuarizedUsername'}上的"用户"都映射到'security.aspnetuser.usernameIndex',但具有不同的列({'formanizedizedusername'','''','','''',''tenantid'}和{'normolizedUsername'})。
显然,我想在base.onmodelcreating()调用中添加它在我的代码中添加,但找不到这样做的方法。
是否有一种方法可以从模型建立链上进一步创建的ModelBuilder中删除索引?
我在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();
});
}