Skip to content

Commit 6570620

Browse files
committed
Possible BREAKING CHANGE for external frameworks:
- see changes in ISessionFactory SVN: trunk@3526
1 parent 23eb030 commit 6570620

File tree

3 files changed

+32
-18
lines changed

3 files changed

+32
-18
lines changed

src/NHibernate/Action/BulkOperationCleanupAction.cs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System;
2-
using System.Collections;
32
using System.Collections.Generic;
43
using Iesi.Collections.Generic;
54
using NHibernate.Engine;
5+
using NHibernate.Metadata;
66
using NHibernate.Persister.Entity;
77

88
namespace NHibernate.Action
@@ -51,10 +51,10 @@ public BulkOperationCleanupAction(ISessionImplementor session, ISet<string> quer
5151

5252
ISet<string> tmpSpaces = new HashedSet<string>(querySpaces);
5353
ISessionFactoryImplementor factory = session.Factory;
54-
IDictionary acmd = factory.GetAllClassMetadata();
55-
foreach (DictionaryEntry entry in acmd)
54+
IDictionary<string, IClassMetadata> acmd = factory.GetAllClassMetadata();
55+
foreach (KeyValuePair<string, IClassMetadata> entry in acmd)
5656
{
57-
string entityName = ((System.Type) entry.Key).FullName;
57+
string entityName = entry.Key;
5858
IEntityPersister persister = factory.GetEntityPersister(entityName);
5959
string[] entitySpaces = persister.QuerySpaces;
6060

src/NHibernate/ISessionFactory.cs

+15-8
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,18 @@ public interface ISessionFactory : IDisposable
7373
IDatabinder OpenDatabinder();
7474

7575
/// <summary>
76-
/// Get the <c>ClassMetadata</c> associated with the given entity class
76+
/// Get the <see cref="IClassMetadata"/> associated with the given entity class
7777
/// </summary>
78-
/// <param name="persistentType"></param>
79-
/// <returns></returns>
80-
IClassMetadata GetClassMetadata(System.Type persistentType);
78+
/// <param name="persistentClass">the given entity type.</param>
79+
/// <returns>The class metadata or <see langword="null"/> if not found.</returns>
80+
/// <seealso cref="IClassMetadata"/>
81+
IClassMetadata GetClassMetadata(System.Type persistentClass);
82+
83+
/// <summary> Get the <see cref="IClassMetadata"/> associated with the given entity name </summary>
84+
/// <param name="entityName">the given entity name.</param>
85+
/// <returns>The class metadata or <see langword="null"/> if not found.</returns>
86+
/// <seealso cref="IClassMetadata"/>
87+
IClassMetadata GetClassMetadata(string entityName);
8188

8289
/// <summary>
8390
/// Get the <c>CollectionMetadata</c> associated with the named collection role
@@ -86,12 +93,12 @@ public interface ISessionFactory : IDisposable
8693
/// <returns></returns>
8794
ICollectionMetadata GetCollectionMetadata(string roleName);
8895

89-
/// <summary>
90-
/// Get all <c>ClassMetadata</c> as a <c>IDictionary</c> from <c>Type</c>
96+
/// <summary>
97+
/// Get all <see cref="IClassMetadata"/> as a <see cref="IDictionary"/> from entityname <see langword="string"/>
9198
/// to metadata object
9299
/// </summary>
93-
/// <returns></returns>
94-
IDictionary GetAllClassMetadata();
100+
/// <returns> A dictionary from <see langword="string"/> an entity name to <see cref="IClassMetadata"/> </returns>
101+
IDictionary<string, IClassMetadata> GetAllClassMetadata();
95102

96103
/// <summary>
97104
/// Get all <c>CollectionMetadata</c> as a <c>IDictionary</c> from role name

src/NHibernate/Impl/SessionFactoryImpl.cs

+13-6
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void HandleEntityNotFound(string entityName, object id)
9393

9494
[NonSerialized] private readonly IDictionary classPersistersByName;
9595

96-
[NonSerialized] private readonly IDictionary classMetadata;
96+
[NonSerialized] private readonly IDictionary<string, IClassMetadata> classMetadata;
9797

9898
[NonSerialized] private readonly Dictionary<string, ICollectionPersister> collectionPersisters;
9999

@@ -190,7 +190,7 @@ public SessionFactoryImpl(Configuration cfg, IMapping mapping, Settings settings
190190
IDictionary caches = new Hashtable();
191191
entityPersisters = new Hashtable();
192192
classPersistersByName = new Hashtable();
193-
IDictionary classMeta = new Hashtable();
193+
Dictionary<string, IClassMetadata> classMeta = new Dictionary<string, IClassMetadata>();
194194

195195
foreach (PersistentClass model in cfg.ClassMappings)
196196
{
@@ -220,9 +220,9 @@ public SessionFactoryImpl(Configuration cfg, IMapping mapping, Settings settings
220220
// Imports provide the ability to jump from the Classname to the AssemblyQualifiedName.
221221
classPersistersByName[model.MappedClass.AssemblyQualifiedName] = cp;
222222

223-
classMeta[model.MappedClass] = cp.ClassMetadata;
223+
classMeta[model.EntityName] = cp.ClassMetadata;
224224
}
225-
classMetadata = new Hashtable(classMeta);
225+
classMetadata = new UnmodifiableDictionary<string, IClassMetadata>(classMeta);
226226
Dictionary<string, ISet<string>> tmpEntityToCollectionRoleMap = new Dictionary<string, ISet<string>>();
227227
collectionPersisters = new Dictionary<string, ICollectionPersister>();
228228
foreach (Mapping.Collection map in cfg.CollectionMappings)
@@ -926,7 +926,14 @@ public string DefaultSchema
926926

927927
public IClassMetadata GetClassMetadata(System.Type persistentClass)
928928
{
929-
return GetEntityPersister(persistentClass).ClassMetadata;
929+
return GetClassMetadata(persistentClass.FullName);
930+
}
931+
932+
public IClassMetadata GetClassMetadata(string entityName)
933+
{
934+
IClassMetadata result;
935+
classMetadata.TryGetValue(entityName, out result);
936+
return result;
930937
}
931938

932939
public ICollectionMetadata GetCollectionMetadata(string roleName)
@@ -1012,7 +1019,7 @@ public string GetImportedClassName(string className)
10121019
}
10131020

10141021
/// <summary></summary>
1015-
public IDictionary GetAllClassMetadata()
1022+
public IDictionary<string, IClassMetadata> GetAllClassMetadata()
10161023
{
10171024
return classMetadata;
10181025
}

0 commit comments

Comments
 (0)