Skip to content

Commit 7ab4dfa

Browse files
committed
Configuration through lambdas
SVN: trunk@4560
1 parent cdfdd04 commit 7ab4dfa

18 files changed

+1031
-407
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
using NHibernate.AdoNet;
2+
using NHibernate.Cache;
3+
using NHibernate.Cfg;
4+
using NHibernate.Dialect;
5+
using NHibernate.Driver;
6+
using NHibernate.Hql.Classic;
7+
using NHibernate.Type;
8+
using NUnit.Framework;
9+
using NHibernate.Cfg.Loquacious;
10+
using System.Data;
11+
using NHibernate.Exceptions;
12+
13+
namespace NHibernate.Test.CfgTest.Loquacious
14+
{
15+
[TestFixture]
16+
public class LambdaConfigurationFixture
17+
{
18+
[Test]
19+
public void FullConfiguration()
20+
{
21+
var configure = new Configuration();
22+
configure.SessionFactoryName("SomeName");
23+
configure.Cache(c =>
24+
{
25+
c.UseMinimalPuts = true;
26+
c.DefaultExpiration = 15;
27+
c.RegionsPrefix = "xyz";
28+
c.Provider<HashtableCacheProvider>();
29+
c.QueryCache<StandardQueryCache>();
30+
});
31+
configure.CollectionTypeFactory<DefaultCollectionTypeFactory>();
32+
configure.HqlQueryTranslator<ClassicQueryTranslatorFactory>();
33+
configure.Proxy(p =>
34+
{
35+
p.Validation = false;
36+
p.ProxyFactoryFactory<ByteCode.LinFu.ProxyFactoryFactory>();
37+
});
38+
configure.Mappings(m=>
39+
{
40+
m.DefaultCatalog = "MyCatalog";
41+
m.DefaultSchema = "MySche";
42+
});
43+
configure.DataBaseIntegration(db =>
44+
{
45+
db.Dialect<MsSql2000Dialect>();
46+
db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
47+
db.Batcher<SqlClientBatchingBatcherFactory>();
48+
db.BatchSize = 15;
49+
db.ConnectionProvider<DebugConnectionProvider>();
50+
db.Driver<SqlClientDriver>();
51+
db.ConnectionReleaseMode = ConnectionReleaseMode.AfterTransaction;
52+
db.IsolationLevel = IsolationLevel.ReadCommitted;
53+
db.ConnectionString = "The connection string";
54+
db.AutoCommentSql = true;
55+
db.ExceptionConverter<SQLStateConverter>();
56+
db.PrepareCommands = true;
57+
db.Timeout = 10;
58+
db.MaximumDepthOfOuterJoinFetching = 11;
59+
db.HqlToSqlSubstitutions = "true 1, false 0, yes 'Y', no 'N'";
60+
db.SchemaAction = SchemaAutoAction.Validate;
61+
});
62+
63+
Assert.That(configure.Properties[Environment.SessionFactoryName], Is.EqualTo("SomeName"));
64+
Assert.That(configure.Properties[Environment.CacheProvider],
65+
Is.EqualTo(typeof(HashtableCacheProvider).AssemblyQualifiedName));
66+
Assert.That(configure.Properties[Environment.CacheRegionPrefix], Is.EqualTo("xyz"));
67+
Assert.That(configure.Properties[Environment.QueryCacheFactory],
68+
Is.EqualTo(typeof(StandardQueryCache).AssemblyQualifiedName));
69+
Assert.That(configure.Properties[Environment.UseMinimalPuts], Is.EqualTo("true"));
70+
Assert.That(configure.Properties[Environment.CacheDefaultExpiration], Is.EqualTo("15"));
71+
Assert.That(configure.Properties[Environment.CollectionTypeFactoryClass],
72+
Is.EqualTo(typeof(DefaultCollectionTypeFactory).AssemblyQualifiedName));
73+
Assert.That(configure.Properties[Environment.UseProxyValidator], Is.EqualTo("false"));
74+
Assert.That(configure.Properties[Environment.ProxyFactoryFactoryClass],
75+
Is.EqualTo(typeof(ByteCode.LinFu.ProxyFactoryFactory).AssemblyQualifiedName));
76+
Assert.That(configure.Properties[Environment.QueryTranslator],
77+
Is.EqualTo(typeof(ClassicQueryTranslatorFactory).AssemblyQualifiedName));
78+
Assert.That(configure.Properties[Environment.DefaultCatalog], Is.EqualTo("MyCatalog"));
79+
Assert.That(configure.Properties[Environment.DefaultSchema], Is.EqualTo("MySche"));
80+
Assert.That(configure.Properties[Environment.Dialect],
81+
Is.EqualTo(typeof(MsSql2000Dialect).AssemblyQualifiedName));
82+
Assert.That(configure.Properties[Environment.Hbm2ddlKeyWords], Is.EqualTo("auto-quote"));
83+
Assert.That(configure.Properties[Environment.BatchStrategy],
84+
Is.EqualTo(typeof(SqlClientBatchingBatcherFactory).AssemblyQualifiedName));
85+
Assert.That(configure.Properties[Environment.BatchSize], Is.EqualTo("15"));
86+
Assert.That(configure.Properties[Environment.ConnectionProvider],
87+
Is.EqualTo(typeof(DebugConnectionProvider).AssemblyQualifiedName));
88+
Assert.That(configure.Properties[Environment.ConnectionDriver],
89+
Is.EqualTo(typeof(SqlClientDriver).AssemblyQualifiedName));
90+
Assert.That(configure.Properties[Environment.ReleaseConnections],
91+
Is.EqualTo(ConnectionReleaseModeParser.ToString(ConnectionReleaseMode.AfterTransaction)));
92+
Assert.That(configure.Properties[Environment.Isolation], Is.EqualTo("ReadCommitted"));
93+
Assert.That(configure.Properties[Environment.ConnectionString], Is.EqualTo("The connection string"));
94+
Assert.That(configure.Properties[Environment.UseSqlComments], Is.EqualTo("true"));
95+
Assert.That(configure.Properties[Environment.SqlExceptionConverter],
96+
Is.EqualTo(typeof(SQLStateConverter).AssemblyQualifiedName));
97+
Assert.That(configure.Properties[Environment.PrepareSql], Is.EqualTo("true"));
98+
Assert.That(configure.Properties[Environment.CommandTimeout], Is.EqualTo("10"));
99+
Assert.That(configure.Properties[Environment.MaxFetchDepth], Is.EqualTo("11"));
100+
Assert.That(configure.Properties[Environment.QuerySubstitutions], Is.EqualTo("true 1, false 0, yes 'Y', no 'N'"));
101+
Assert.That(configure.Properties[Environment.Hbm2ddlAuto], Is.EqualTo("validate"));
102+
}
103+
}
104+
}
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using NHibernate.Cfg;
2+
using NUnit.Framework;
3+
4+
namespace NHibernate.Test.CfgTest
5+
{
6+
[TestFixture]
7+
public class SchemaAutoActionFixture
8+
{
9+
[Test]
10+
public void Equality()
11+
{
12+
Assert.That(SchemaAutoAction.Recreate.Equals("create-drop"));
13+
Assert.That(SchemaAutoAction.Recreate == "create-drop");
14+
Assert.That(SchemaAutoAction.Create.Equals("create"));
15+
Assert.That(SchemaAutoAction.Create == "create");
16+
Assert.That(SchemaAutoAction.Update.Equals("update"));
17+
Assert.That(SchemaAutoAction.Update == "update");
18+
Assert.That(SchemaAutoAction.Validate.Equals("validate"));
19+
Assert.That(SchemaAutoAction.Validate == "validate");
20+
}
21+
}
22+
}

Diff for: src/NHibernate.Test/NHibernate.Test.csproj

+2
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,10 @@
108108
<Compile Include="CfgTest\HbmOrderingFixture.cs" />
109109
<Compile Include="CfgTest\LocatedInTestAssembly.cs" />
110110
<Compile Include="CfgTest\Loquacious\ConfigurationFixture.cs" />
111+
<Compile Include="CfgTest\Loquacious\LambdaConfigurationFixture.cs" />
111112
<Compile Include="CfgTest\MappingDocumentAggregatorTests.cs" />
112113
<Compile Include="CfgTest\MappingDocumentParserTests.cs" />
114+
<Compile Include="CfgTest\SchemaAutoActionFixture.cs" />
113115
<Compile Include="CfgTest\SettingsFactoryFixture.cs" />
114116
<Compile Include="Classic\EntityWithLifecycle.cs" />
115117
<Compile Include="Classic\LifecycleFixture.cs" />

Diff for: src/NHibernate/Cfg/Hbm2ddlKeyWords.cs

+85
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
namespace NHibernate.Cfg
2+
{
3+
public class Hbm2DDLKeyWords
4+
{
5+
private readonly string value;
6+
7+
private Hbm2DDLKeyWords(string value)
8+
{
9+
this.value = value;
10+
}
11+
12+
public override string ToString()
13+
{
14+
return value;
15+
}
16+
17+
public override bool Equals(object obj)
18+
{
19+
if (ReferenceEquals(null, obj))
20+
{
21+
return false;
22+
}
23+
if (ReferenceEquals(this, obj))
24+
{
25+
return true;
26+
}
27+
if (obj.GetType() != typeof(Hbm2DDLKeyWords))
28+
{
29+
return false;
30+
}
31+
return Equals((Hbm2DDLKeyWords)obj);
32+
}
33+
34+
public bool Equals(string other)
35+
{
36+
return value.Equals(other);
37+
}
38+
39+
public bool Equals(Hbm2DDLKeyWords other)
40+
{
41+
if (ReferenceEquals(null, other))
42+
{
43+
return false;
44+
}
45+
if (ReferenceEquals(this, other))
46+
{
47+
return true;
48+
}
49+
return Equals(other.value, value);
50+
}
51+
52+
public override int GetHashCode()
53+
{
54+
return (value != null ? value.GetHashCode() : 0);
55+
}
56+
57+
public static bool operator ==(string a, Hbm2DDLKeyWords b)
58+
{
59+
if (ReferenceEquals(null, b))
60+
{
61+
return false;
62+
}
63+
return b.Equals(a);
64+
}
65+
66+
public static bool operator ==(Hbm2DDLKeyWords a, string b)
67+
{
68+
return b == a;
69+
}
70+
71+
public static bool operator !=(Hbm2DDLKeyWords a, string b)
72+
{
73+
return !(a == b);
74+
}
75+
76+
public static bool operator !=(string a, Hbm2DDLKeyWords b)
77+
{
78+
return !(a == b);
79+
}
80+
81+
public static Hbm2DDLKeyWords None = new Hbm2DDLKeyWords("none");
82+
public static Hbm2DDLKeyWords Keywords = new Hbm2DDLKeyWords("keywords");
83+
public static Hbm2DDLKeyWords AutoQuote = new Hbm2DDLKeyWords("auto-quote");
84+
}
85+
}

Diff for: src/NHibernate/Cfg/Loquacious/CacheConfiguration.cs

+109
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
using NHibernate.Cache;
2+
3+
namespace NHibernate.Cfg.Loquacious
4+
{
5+
internal class CacheConfigurationProperties : ICacheConfigurationProperties
6+
{
7+
private readonly Configuration cfg;
8+
9+
public CacheConfigurationProperties(Configuration cfg)
10+
{
11+
this.cfg = cfg;
12+
}
13+
14+
#region Implementation of ICacheConfigurationProperties
15+
16+
public bool UseMinimalPuts
17+
{
18+
set { cfg.SetProperty(Environment.UseMinimalPuts, value.ToString().ToLowerInvariant()); }
19+
}
20+
21+
public string RegionsPrefix
22+
{
23+
set { cfg.SetProperty(Environment.CacheRegionPrefix, value); }
24+
}
25+
26+
public byte DefaultExpiration
27+
{
28+
set { cfg.SetProperty(Environment.CacheDefaultExpiration, value.ToString()); }
29+
}
30+
31+
public void Provider<TProvider>() where TProvider : ICacheProvider
32+
{
33+
cfg.SetProperty(Environment.CacheProvider, typeof (TProvider).AssemblyQualifiedName);
34+
}
35+
36+
public void QueryCache<TFactory>() where TFactory : IQueryCache
37+
{
38+
cfg.SetProperty(Environment.QueryCacheFactory, typeof (TFactory).AssemblyQualifiedName);
39+
}
40+
41+
#endregion
42+
}
43+
44+
internal class CacheConfiguration : ICacheConfiguration
45+
{
46+
private readonly FluentSessionFactoryConfiguration fc;
47+
48+
public CacheConfiguration(FluentSessionFactoryConfiguration parent)
49+
{
50+
fc = parent;
51+
Queries = new QueryCacheConfiguration(this);
52+
}
53+
54+
internal Configuration Configuration
55+
{
56+
get { return fc.Configuration; }
57+
}
58+
59+
#region Implementation of ICacheConfiguration
60+
61+
public ICacheConfiguration Through<TProvider>() where TProvider : ICacheProvider
62+
{
63+
fc.Configuration.SetProperty(Environment.CacheProvider, typeof(TProvider).AssemblyQualifiedName);
64+
return this;
65+
}
66+
67+
public ICacheConfiguration PrefixingRegionsWith(string regionPrefix)
68+
{
69+
fc.Configuration.SetProperty(Environment.CacheRegionPrefix, regionPrefix);
70+
return this;
71+
}
72+
73+
public ICacheConfiguration UsingMinimalPuts()
74+
{
75+
fc.Configuration.SetProperty(Environment.UseMinimalPuts, true.ToString().ToLowerInvariant());
76+
return this;
77+
}
78+
79+
public IFluentSessionFactoryConfiguration WithDefaultExpiration(byte seconds)
80+
{
81+
fc.Configuration.SetProperty(Environment.CacheDefaultExpiration, seconds.ToString());
82+
return fc;
83+
}
84+
85+
public IQueryCacheConfiguration Queries { get; private set; }
86+
87+
#endregion
88+
}
89+
90+
internal class QueryCacheConfiguration : IQueryCacheConfiguration
91+
{
92+
private readonly CacheConfiguration cc;
93+
94+
public QueryCacheConfiguration(CacheConfiguration cc)
95+
{
96+
this.cc = cc;
97+
}
98+
99+
#region Implementation of IQueryCacheConfiguration
100+
101+
public ICacheConfiguration Through<TFactory>() where TFactory : IQueryCache
102+
{
103+
cc.Configuration.SetProperty(Environment.QueryCacheFactory, typeof(TFactory).AssemblyQualifiedName);
104+
return cc;
105+
}
106+
107+
#endregion
108+
}
109+
}

Diff for: src/NHibernate/Cfg/Loquacious/ConfigurationExtensions.cs

+45
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using System;
2+
using NHibernate.Hql;
13
namespace NHibernate.Cfg.Loquacious
24
{
35
public static class ConfigurationExtensions
@@ -6,5 +8,48 @@ public static IFluentSessionFactoryConfiguration SessionFactory(this Configurati
68
{
79
return new FluentSessionFactoryConfiguration(configuration);
810
}
11+
12+
public static Configuration SessionFactoryName(this Configuration configuration, string sessionFactoryName)
13+
{
14+
configuration.SetProperty(Environment.SessionFactoryName, sessionFactoryName);
15+
return configuration;
16+
}
17+
18+
public static Configuration Cache(this Configuration configuration, Action<ICacheConfigurationProperties> cacheProperties)
19+
{
20+
cacheProperties(new CacheConfigurationProperties(configuration));
21+
return configuration;
22+
}
23+
24+
public static Configuration CollectionTypeFactory<TCollecionsFactory>(this Configuration configuration)
25+
{
26+
configuration.SetProperty(Environment.CollectionTypeFactoryClass,
27+
typeof(TCollecionsFactory).AssemblyQualifiedName);
28+
return configuration;
29+
}
30+
31+
public static Configuration Proxy(this Configuration configuration, Action<IProxyConfigurationProperties> proxyProperties)
32+
{
33+
proxyProperties(new ProxyConfigurationProperties(configuration));
34+
return configuration;
35+
}
36+
37+
public static Configuration HqlQueryTranslator<TQueryTranslator>(this Configuration configuration) where TQueryTranslator : IQueryTranslatorFactory
38+
{
39+
configuration.SetProperty(Environment.QueryTranslator, typeof(TQueryTranslator).AssemblyQualifiedName);
40+
return configuration;
41+
}
42+
43+
public static Configuration Mappings(this Configuration configuration, Action<IMappingsConfigurationProperties> mappingsProperties)
44+
{
45+
mappingsProperties(new MappingsConfigurationProperties(configuration));
46+
return configuration;
47+
}
48+
49+
public static Configuration DataBaseIntegration(this Configuration configuration, Action<IDbIntegrationConfigurationProperties> dataBaseIntegration)
50+
{
51+
dataBaseIntegration(new DbIntegrationConfigurationProperties(configuration));
52+
return configuration;
53+
}
954
}
1055
}

0 commit comments

Comments
 (0)