|
|
|
@ -1,10 +1,72 @@ |
|
|
|
using Volo.Abp.EntityFrameworkCore; |
|
|
|
using Volo.Abp.MultiTenancy; |
|
|
|
|
|
|
|
namespace Microsoft.EntityFrameworkCore |
|
|
|
{ |
|
|
|
public static class AbpModelBuilderExtensions |
|
|
|
{ |
|
|
|
private const string ModelDatabaseProviderAnnotationKey = "_Abp_DatabaseProvider"; |
|
|
|
private const string ModelMultiTenancySideAnnotationKey = "_Abp_MultiTenancySide"; |
|
|
|
|
|
|
|
#region MultiTenancySide
|
|
|
|
|
|
|
|
public static void SetMultiTenancySide( |
|
|
|
this ModelBuilder modelBuilder, |
|
|
|
MultiTenancySides side) |
|
|
|
{ |
|
|
|
modelBuilder.Model.SetAnnotation(ModelMultiTenancySideAnnotationKey, side); |
|
|
|
} |
|
|
|
|
|
|
|
public static MultiTenancySides GetMultiTenancySide(this ModelBuilder modelBuilder) |
|
|
|
{ |
|
|
|
var value = modelBuilder.Model[ModelMultiTenancySideAnnotationKey]; |
|
|
|
if (value == null) |
|
|
|
{ |
|
|
|
return MultiTenancySides.Both; |
|
|
|
} |
|
|
|
|
|
|
|
return (MultiTenancySides) value; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns true if this is a database schema that is used by the host
|
|
|
|
/// but can also be shared with the tenants.
|
|
|
|
/// </summary>
|
|
|
|
public static bool IsHostDatabase(this ModelBuilder modelBuilder) |
|
|
|
{ |
|
|
|
return modelBuilder.GetMultiTenancySide().HasFlag(MultiTenancySides.Host); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns true if this is a database schema that is used by the tenants
|
|
|
|
/// but can also be shared with the host.
|
|
|
|
/// </summary>
|
|
|
|
public static bool IsTenantDatabase(this ModelBuilder modelBuilder) |
|
|
|
{ |
|
|
|
return modelBuilder.GetMultiTenancySide().HasFlag(MultiTenancySides.Tenant); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns true if this is a database schema that is only used by the host
|
|
|
|
/// and should not contain tenant-only tables.
|
|
|
|
/// </summary>
|
|
|
|
public static bool IsHostOnlyDatabase(this ModelBuilder modelBuilder) |
|
|
|
{ |
|
|
|
return modelBuilder.GetMultiTenancySide() == MultiTenancySides.Host; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Returns true if this is a database schema that is only used by tenants.
|
|
|
|
/// and should not contain host-only tables.
|
|
|
|
/// </summary>
|
|
|
|
public static bool IsTenantOnlyDatabase(this ModelBuilder modelBuilder) |
|
|
|
{ |
|
|
|
return modelBuilder.GetMultiTenancySide() == MultiTenancySides.Tenant; |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region DatabaseProvider
|
|
|
|
|
|
|
|
public static void SetDatabaseProvider( |
|
|
|
this ModelBuilder modelBuilder, |
|
|
|
@ -61,7 +123,7 @@ namespace Microsoft.EntityFrameworkCore |
|
|
|
{ |
|
|
|
modelBuilder.SetDatabaseProvider(EfCoreDatabaseProvider.InMemory); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static bool IsUsingInMemory( |
|
|
|
this ModelBuilder modelBuilder) |
|
|
|
{ |
|
|
|
@ -73,7 +135,7 @@ namespace Microsoft.EntityFrameworkCore |
|
|
|
{ |
|
|
|
modelBuilder.SetDatabaseProvider(EfCoreDatabaseProvider.Cosmos); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static bool IsUsingCosmos( |
|
|
|
this ModelBuilder modelBuilder) |
|
|
|
{ |
|
|
|
@ -85,11 +147,13 @@ namespace Microsoft.EntityFrameworkCore |
|
|
|
{ |
|
|
|
modelBuilder.SetDatabaseProvider(EfCoreDatabaseProvider.Firebird); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static bool IsUsingFirebird( |
|
|
|
this ModelBuilder modelBuilder) |
|
|
|
{ |
|
|
|
return modelBuilder.GetDatabaseProvider() == EfCoreDatabaseProvider.Firebird; |
|
|
|
} |
|
|
|
|
|
|
|
#endregion
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|