diff --git a/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs b/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs index 95f2a960598..bbe5386a35a 100644 --- a/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs +++ b/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs @@ -122,6 +122,21 @@ public void CanSetFormula() Assert.That(mapping.formula1, Is.EqualTo("SomeFormula")); } + [Test] + public void CanSetMultipleFormulas() + { + var member = For.Property(c => c.Relation); + var mapping = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, mapping); + + mapper.Formulas("formula1", "formula2", "formula3"); + Assert.That(mapping.formula1, Is.Null); + Assert.That(mapping.formula, Has.Length.EqualTo(3)); + Assert.That( + mapping.formula.Select(f => f.Text.Single()), + Is.EquivalentTo(new[] { "formula1", "formula2", "formula3" })); + } + [Test] public void WhenSetFormulaWithNullThenSetFormulaWithNull() { diff --git a/src/NHibernate/Mapping/ByCode/IOneToOneMapper.cs b/src/NHibernate/Mapping/ByCode/IOneToOneMapper.cs index 6f485ede444..9f1738f1732 100644 --- a/src/NHibernate/Mapping/ByCode/IOneToOneMapper.cs +++ b/src/NHibernate/Mapping/ByCode/IOneToOneMapper.cs @@ -1,6 +1,8 @@ using System; using System.Linq.Expressions; using System.Reflection; +using NHibernate.Mapping.ByCode.Impl; +using NHibernate.Util; namespace NHibernate.Mapping.ByCode { @@ -19,4 +21,19 @@ public interface IOneToOneMapper : IOneToOneMapper { void PropertyReference(Expression> reference); } -} \ No newline at end of file + + // 6.0 TODO: move method into IOneToOneMapper + public static class OneToOneMapperExtensions + { + /// + /// Maps many formulas. + /// + /// The mapper. + /// The formulas to map. + public static void Formulas(this IOneToOneMapper mapper, params string[] formulas) + { + var o2oMapper = ReflectHelper.CastOrThrow(mapper, "Setting many formula"); + o2oMapper.Formulas(formulas); + } + } +} diff --git a/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs b/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs index ca3511319a7..53fa18920b5 100644 --- a/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs +++ b/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Linq.Expressions; using System.Reflection; using NHibernate.Cfg.MappingSchema; @@ -115,6 +116,19 @@ public void Formula(string formula) } } + public void Formulas(params string[] formulas) + { + if (formulas == null) + throw new ArgumentNullException(nameof(formulas)); + + _oneToOne.formula1 = null; + _oneToOne.formula = + formulas + .Select( + f => new HbmFormula { Text = f.Split(StringHelper.LineSeparators, StringSplitOptions.None) }) + .ToArray(); + } + public void ForeignKey(string foreignKeyName) { _oneToOne.foreignkey = foreignKeyName; @@ -140,4 +154,4 @@ public void PropertyReference(Expression> referenc PropertyReference(TypeExtensions.DecodeMemberAccessExpression(reference)); } } -} \ No newline at end of file +}