|  |  |  | @ -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, | 
			
		
	
	
		
			
				
					|  |  |  | @ -91,5 +153,7 @@ namespace Microsoft.EntityFrameworkCore | 
			
		
	
		
			
				
					|  |  |  |  |         { | 
			
		
	
		
			
				
					|  |  |  |  |             return modelBuilder.GetDatabaseProvider() == EfCoreDatabaseProvider.Firebird; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  |         #endregion | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  | } |