Skip to content

Commit 69cd430

Browse files
committed
Raise exception when user defined resultset mapping misses expected properties
1 parent 2bd8bc7 commit 69cd430

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/NHibernate/Loader/DefaultEntityAliases.cs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Collections.Generic;
2+
using System.Linq;
23
using NHibernate.Persister.Entity;
34
using NHibernate.Util;
45

@@ -26,18 +27,14 @@ public DefaultEntityAliases(ILoadable persister, string suffix)
2627
/// </summary>
2728
public DefaultEntityAliases(IDictionary<string, string[]> userProvidedAliases, ILoadable persister, string suffix)
2829
{
30+
ValidateUserProvidedAliases(userProvidedAliases, persister);
31+
2932
this.suffix = suffix;
3033
this.userProvidedAliases = userProvidedAliases;
3134

3235
string[] keyColumnsCandidates = GetUserProvidedAliases(persister.IdentifierPropertyName, null);
33-
if (keyColumnsCandidates == null)
34-
{
35-
suffixedKeyColumns = GetUserProvidedAliases(EntityPersister.EntityID, GetIdentifierAliases(persister, suffix));
36-
}
37-
else
38-
{
39-
suffixedKeyColumns = keyColumnsCandidates;
40-
}
36+
suffixedKeyColumns = keyColumnsCandidates ??
37+
GetUserProvidedAliases(EntityPersister.EntityID, GetIdentifierAliases(persister, suffix));
4138
Intern(suffixedKeyColumns);
4239

4340
suffixedPropertyColumns = GetSuffixedPropertyAliases(persister);
@@ -54,6 +51,21 @@ public DefaultEntityAliases(IDictionary<string, string[]> userProvidedAliases, I
5451
rowIdAlias = Loadable.RowIdAlias + suffix; // TODO: not visible to the user!
5552
}
5653

54+
private static void ValidateUserProvidedAliases(IDictionary<string, string[]> userProvidedAliases, ILoadable persister)
55+
{
56+
if (userProvidedAliases != null && userProvidedAliases.Count > 0)
57+
{
58+
var missingPropertyNames = persister.PropertyNames.Except(userProvidedAliases.Keys).ToArray();
59+
if (missingPropertyNames.Length > 0)
60+
{
61+
throw new MappingException(
62+
string.Format(
63+
"User provided resulset mapping for entity '{0}' misses mappings for the following properties: {1}.",
64+
persister.EntityName, string.Join(", ", missingPropertyNames)));
65+
}
66+
}
67+
}
68+
5769
protected virtual string GetDiscriminatorAlias(ILoadable persister, string suffix)
5870
{
5971
return persister.GetDiscriminatorAlias(suffix);

0 commit comments

Comments
 (0)