Property formula is not working.

Andy's Avatar

Andy

19 Jul, 2010 06:15 PM via web

Hi,

I'm trying to map a simple formula for a property. Here's the Fluent mapping:
Map(t => t.HasAddress).Formula("(Select Count(*) from dbo.Address Where Address.Person = Id)");

This bombs, seemingly while it's evaluating our NotNull convention. The error is that there is an incomplete mapping; the inner exception is from Linq to Objects, Sequence contains no elements.

Also, we are on a slightly modified branch from 4/10, due to this issue: https://fluentnhibernate.tenderapp.com/discussions/help/164-convent...

Thanks
Andy

  1. 2 Posted by steve on 09 Dec, 2010 09:39 AM

    steve's Avatar

    I'm also experiencing this with the 1.1 release (unmodified). We have a simple property convention that defines NotNull:

    public class CustomPropertyConvention : IPropertyConvention
    {
        public void Apply(IPropertyInstance instance)
        {
            instance.Not.Nullable();
        }
    }
    

    And I've defined a Formula based mapping:

    Map(x => x.LastModified).Formula("SELECT max(SomeField) FROM SomeColumn");
    

    This throws an InvalidOperationException at startup:

    System.InvalidOperationException : Sequence contains no elements
    at System.Linq.Enumerable.First(IEnumerable`1 source)
    at FluentNHibernate.Conventions.Instances.PropertyInstance.Nullable() in PropertyInstance.cs: line 45
    at MyProject.Data.Conventions.CustomPropertyConvention.Apply(IPropertyInstance instance) in CustomPropertyConvention.cs: line 10
    at FluentNHibernate.Visitors.ConventionVisitor.Apply(IEnumerable conventions, TInstance instance) in ConventionVisitor.cs: line 260
    at FluentNHibernate.Visitors.ConventionVisitor.ProcessProperty(PropertyMapping propertyMapping) in ConventionVisitor.cs: line 65
    at FluentNHibernate.MappingModel.PropertyMapping.AcceptVisitor(IMappingModelVisitor visitor) in PropertyMapping.cs: line 22
    at FluentNHibernate.Visitors.DefaultMappingModelVisitor.Visit(PropertyMapping propertyMapping) in DefaultMappingModelVisitor.cs: line 125
    at FluentNHibernate.MappingModel.MappedMembers.AcceptVisitor(IMappingModelVisitor visitor) in MappedMembers.cs: line 194
    at FluentNHibernate.MappingModel.ClassBased.ClassMappingBase.AcceptVisitor(IMappingModelVisitor visitor) in ClassMappingBase.cs: line 27
    at FluentNHibernate.MappingModel.ClassBased.ClassMapping.AcceptVisitor(IMappingModelVisitor visitor) in ClassMapping.cs: line 100
    at FluentNHibernate.Visitors.DefaultMappingModelVisitor.Visit(ClassMapping classMapping) in DefaultMappingModelVisitor.cs: line 110
    at FluentNHibernate.MappingModel.HibernateMapping.AcceptVisitor(IMappingModelVisitor visitor) in HibernateMapping.cs: line 42
    at FluentNHibernate.Visitors.DefaultMappingModelVisitor.<Visit>b__0(HibernateMapping x) in DefaultMappingModelVisitor.cs: line 99
    at FluentNHibernate.Utils.CollectionExtensions.Each(IEnumerable`1 enumerable, Action`1 each) in CollectionExtensions.cs: line 14
    at FluentNHibernate.Visitors.DefaultMappingModelVisitor.Visit(IEnumerable`1 mappings) in DefaultMappingModelVisitor.cs: line 100
    at FluentNHibernate.PersistenceModel.ApplyVisitors(IEnumerable`1 mappings) in PersistenceModel.cs: line 186
    at FluentNHibernate.PersistenceModel.BuildMappings() in PersistenceModel.cs: line 146
    at FluentNHibernate.Automapping.AutoPersistenceModel.BuildMappings() in AutoPersistenceModel.cs: line 112
    at FluentNHibernate.PersistenceModel.EnsureMappingsBuilt() in PersistenceModel.cs: line 194
    at FluentNHibernate.PersistenceModel.Configure(Configuration cfg) in PersistenceModel.cs: line 252
    at FluentNHibernate.Automapping.AutoPersistenceModel.Configure(Configuration configuration) in AutoPersistenceModel.cs: line 171
    at FluentNHibernate.ConfigurationHelper.AddAutoMappings(Configuration configuration, AutoPersistenceModel model) in Extensions.cs: line 26
    at MyProject.Data.FluentNHibernateConfigurationBuilder.GetConfiguration(IConfiguration facilityConfiguration) in FluentNHibernateConfigurationBuilder.cs: line 25
    

    I hope this helps!

  2. 3 Posted by steve on 09 Dec, 2010 09:42 AM

    steve's Avatar

    It's failing here (PropertyInstance.cs):

        public new void Nullable()
        {
            if (!mapping.Columns.First().IsSpecified("NotNull"))
                foreach (var column in mapping.Columns)
                    column.NotNull = !nextBool;
    
            nextBool = true;
        }
    

    mapping.Columns.First() throws InvalidOperationException here because mapping.Columns contains no entries.

Reply to this discussion

Preview Comments are parsed with Markdown. Help with syntax

Attached Files

    You can attach files up to 10MB

    What month comes before July?