Skip to content

Commit fa3fd18

Browse files
author
Mantas Janulionis
committed
Updated database schema in EntityMap bases. Added ability to automatically resolve database schema name by assemblies module descriptor
1 parent 0c14f46 commit fa3fd18

File tree

4 files changed

+111
-2
lines changed

4 files changed

+111
-2
lines changed

BetterModules.Core/BetterModules.Core.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@
141141
<Compile Include="Modules\Registration\IModulesRegistration.cs" />
142142
<Compile Include="Modules\ModuleDescriptor.cs" />
143143
<Compile Include="Modules\Registration\ModuleRegistrationContext.cs" />
144+
<Compile Include="Modules\Registration\ModulesRegistrationSingleton.cs" />
144145
<Compile Include="Properties\AssemblyInfo.cs" />
145146
<Compile Include="Security\DefaultPrincipalProvider.cs" />
146147
<Compile Include="Security\IPrincipalProvider.cs" />

BetterModules.Core/Models/EntityMapBase.cs

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
1+
using System;
2+
using System.Linq;
3+
using System.Reflection;
4+
using Autofac;
15
using BetterModules.Core.DataContracts;
6+
using BetterModules.Core.Dependencies;
7+
using BetterModules.Core.Modules.Registration;
28
using FluentNHibernate.Mapping;
9+
using NHibernate;
310

411
namespace BetterModules.Core.Models
512
{
@@ -41,7 +48,43 @@ protected string SchemaName
4148
protected EntityMapBase(string moduleName)
4249
{
4350
this.moduleName = moduleName;
51+
var currentModule = ModulesRegistrationSingleton.Instance.GetModules().First(module => module.ModuleDescriptor.Name == moduleName);
52+
schemaName = currentModule.ModuleDescriptor.SchemaName;
53+
Init();
54+
}
4455

56+
/// <summary>
57+
/// Initializes a new instance of the <see cref="EntityMapBase{TEntity}"/> class.
58+
/// </summary>
59+
/// <param name="moduleDescriptorType">Type of the module descriptor.</param>
60+
protected EntityMapBase(Type moduleDescriptorType)
61+
{
62+
var currentModule =
63+
ModulesRegistrationSingleton.Instance.GetModules()
64+
.First(module => module.ModuleDescriptor.GetType() == moduleDescriptorType);
65+
schemaName = currentModule.ModuleDescriptor.SchemaName;
66+
Init();
67+
}
68+
69+
/// <summary>
70+
/// Initializes a new instance of the <see cref="EntityMapBase{TEntity}"/> class.
71+
/// </summary>
72+
protected EntityMapBase()
73+
{
74+
var assembly = Assembly.GetExecutingAssembly();
75+
var currentModule =
76+
ModulesRegistrationSingleton.Instance.GetModules()
77+
.FirstOrDefault(module => module.ModuleDescriptor.AssemblyName == assembly.GetName());
78+
if (currentModule != null)
79+
{
80+
schemaName = currentModule.ModuleDescriptor.SchemaName;
81+
}
82+
83+
Init();
84+
}
85+
86+
private void Init()
87+
{
4588
if (SchemaName != null)
4689
{
4790
Schema(SchemaName);
@@ -50,15 +93,15 @@ protected EntityMapBase(string moduleName)
5093
Id(x => x.Id).GeneratedBy.Custom<EntityIdGenerator>();
5194

5295
Map(x => x.IsDeleted).Not.Nullable();
53-
96+
5497
Map(x => x.CreatedOn).Not.Nullable();
5598
Map(x => x.ModifiedOn).Not.Nullable();
5699
Map(x => x.DeletedOn).Nullable();
57100

58101
Map(x => x.CreatedByUser).Not.Nullable().Length(MaxLength.Name);
59102
Map(x => x.ModifiedByUser).Not.Nullable().Length(MaxLength.Name);
60103
Map(x => x.DeletedByUser).Nullable().Length(MaxLength.Name);
61-
104+
62105
Version(x => x.Version);
63106

64107
OptimisticLock.Version();

BetterModules.Core/Models/EntitySubClassMapBase.cs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
using System;
2+
using System.Linq;
3+
using System.Reflection;
4+
using BetterModules.Core.Modules.Registration;
15
using FluentNHibernate.Mapping;
26

37
namespace BetterModules.Core.Models
@@ -39,7 +43,43 @@ protected string SchemaName
3943
protected EntitySubClassMapBase(string moduleName)
4044
{
4145
this.moduleName = moduleName;
46+
var currentModule = ModulesRegistrationSingleton.Instance.GetModules().First(module => module.ModuleDescriptor.Name == moduleName);
47+
schemaName = currentModule.ModuleDescriptor.SchemaName;
48+
Init();
49+
}
50+
51+
52+
/// <summary>
53+
/// Initializes a new instance of the <see cref="EntitySubClassMapBase{TEntity}"/> class.
54+
/// </summary>
55+
/// <param name="moduleDescriptorType">Type of the module descriptor.</param>
56+
protected EntitySubClassMapBase(Type moduleDescriptorType)
57+
{
58+
var currentModule =
59+
ModulesRegistrationSingleton.Instance.GetModules()
60+
.First(module => module.ModuleDescriptor.GetType() == moduleDescriptorType);
61+
schemaName = currentModule.ModuleDescriptor.SchemaName;
62+
Init();
63+
}
4264

65+
/// <summary>
66+
/// Initializes a new instance of the <see cref="EntitySubClassMapBase{TEntity}"/> class.
67+
/// </summary>
68+
protected EntitySubClassMapBase()
69+
{
70+
var assembly = Assembly.GetExecutingAssembly();
71+
var currentModule =
72+
ModulesRegistrationSingleton.Instance.GetModules()
73+
.FirstOrDefault(module => module.ModuleDescriptor.AssemblyName == assembly.GetName());
74+
if (currentModule != null)
75+
{
76+
schemaName = currentModule.ModuleDescriptor.SchemaName;
77+
}
78+
Init();
79+
}
80+
81+
private void Init()
82+
{
4383
if (SchemaName != null)
4484
{
4585
Schema(SchemaName);
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using Autofac;
2+
using BetterModules.Core.Dependencies;
3+
4+
namespace BetterModules.Core.Modules.Registration
5+
{
6+
internal static class ModulesRegistrationSingleton
7+
{
8+
private static IModulesRegistration modulesRegistration;
9+
10+
public static IModulesRegistration Instance
11+
{
12+
get
13+
{
14+
if (modulesRegistration == null)
15+
{
16+
using (var lifetimeScope = ContextScopeProvider.CreateChildContainer())
17+
{
18+
modulesRegistration = lifetimeScope.Resolve<IModulesRegistration>();
19+
}
20+
}
21+
return modulesRegistration;
22+
}
23+
}
24+
}
25+
}

0 commit comments

Comments
 (0)