-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: Could not compile the mapping document
PostPosted: Mon Jun 13, 2011 8:17 am 
Newbie

Joined: Mon Jun 13, 2011 8:12 am
Posts: 1
Hey everyone,

I'm working through a tutorial which uses an older version of NHibernate. I'm trying to use version 3.1.0. However, I get the following error: Could not compile the mapping document: Agathas.Storefront.Repository.NHibernate.Mapping.Basket.hbm.xml. The inner exception of the error is: Could not find the property 'Items', associated to the field '_items', in class 'Agathas.Storefront.Model.Basket.Basket'.

Here's the full stack trace:
Quote:
NHibernate.MappingException was unhandled by user code
Message=Could not compile the mapping document: Agathas.Storefront.Repository.NHibernate.Mapping.Basket.hbm.xml
Source=NHibernate
StackTrace:
at NHibernate.Cfg.Configuration.LogAndThrow(Exception exception) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 342
at NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 530
at NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 499
at NHibernate.Cfg.Configuration.ProcessMappingsQueue() in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1832
at NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument document) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1823
at NHibernate.Cfg.Configuration.AddXmlReader(XmlReader hbmReader, String name) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 1816
at NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 632
at NHibernate.Cfg.Configuration.AddResource(String path, Assembly assembly) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 670
at NHibernate.Cfg.Configuration.AddAssembly(Assembly assembly) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 763
at NHibernate.Cfg.Configuration.AddAssembly(String assemblyName) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 746
at Agathas.Storefront.Repository.NHibernate.SessionFactory.Init() in C:\AspPatterns\Agathas.Storefront\Agathas.Storefront.Repository.NHibernate\SessionFactory.cs:line 18
at Agathas.Storefront.Repository.NHibernate.SessionFactory.GetSessionFactory() in C:\AspPatterns\Agathas.Storefront\Agathas.Storefront.Repository.NHibernate\SessionFactory.cs:line 28
at Agathas.Storefront.Repository.NHibernate.SessionFactory.GetNewSession() in C:\AspPatterns\Agathas.Storefront\Agathas.Storefront.Repository.NHibernate\SessionFactory.cs:line 35
at Agathas.Storefront.Repository.NHibernate.SessionFactory.GetCurrentSession() in C:\AspPatterns\Agathas.Storefront\Agathas.Storefront.Repository.NHibernate\SessionFactory.cs:line 46
at Agathas.Storefront.Repository.NHibernate.Repositories.Repository`2.FindAll() in C:\AspPatterns\Agathas.Storefront\Agathas.Storefront.Repository.NHibernate\Repositories\Repository.cs:line 43
at Agathas.Storefront.Services.Implementations.ProductCatalogService.GetAllCategories() in C:\AspPatterns\Agathas.Storefront\Agathas.Storefront.Services\Implementations\ProductCatalogService.cs:line 90
at Agathas.Storefront.Controllers.Controllers.ProductCatalogBaseController.GetCategories() in C:\AspPatterns\Agathas.Storefront\Agathas.Storefront.Controllers\Controllers\ProductCatalogBaseController.cs:line 25
at Agathas.Storefront.Controllers.Controllers.HomeController.Index() in C:\AspPatterns\Agathas.Storefront\Agathas.Storefront.Controllers\Controllers\HomeController.cs:line 26
at lambda_method(Closure , ControllerBase , Object[] )
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassd.<InvokeActionMethodWithFilters>b__a()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException: NHibernate.PropertyNotFoundException
Message=Could not find the property 'Items', associated to the field '_items', in class 'Agathas.Storefront.Model.Basket.Basket'
Source=NHibernate
AccessorType=_items
PropertyName=Items
StackTrace:
at NHibernate.Properties.FieldAccessor.GetGetter(Type theClass, String propertyName) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Properties\FieldAccessor.cs:line 70
at NHibernate.Util.ReflectHelper.GetGetter(Type theClass, String propertyName, String propertyAccessorName) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Util\ReflectHelper.cs:line 112
at NHibernate.Util.ReflectHelper.ReflectedPropertyClass(Type theClass, String name, String access) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Util\ReflectHelper.cs:line 150
at NHibernate.Cfg.XmlHbmBinding.CollectionBinder.GetPropertyType(Type containingType, String propertyName, String propertyAccess) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\CollectionBinder.cs:line 892
at NHibernate.Cfg.XmlHbmBinding.CollectionBinder.BindCollection(ICollectionPropertiesMapping collectionMapping, Collection model, String className, String path, Type containingType, IDictionary`2 inheritedMetas) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\CollectionBinder.cs:line 232
at NHibernate.Cfg.XmlHbmBinding.CollectionBinder.CreateBag(HbmBag bagMapping, String prefix, String path, PersistentClass owner, Type containingType, IDictionary`2 inheritedMetas) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\CollectionBinder.cs:line 85
at NHibernate.Cfg.XmlHbmBinding.CollectionBinder.Create(ICollectionPropertiesMapping collectionMapping, String className, String propertyFullPath, PersistentClass owner, Type containingType, IDictionary`2 inheritedMetas) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\CollectionBinder.cs:line 25
at NHibernate.Cfg.XmlHbmBinding.PropertiesBinder.Bind(IEnumerable`1 properties, Table table, IDictionary`2 inheritedMetas, Action`1 modifier, Action`1 addToModelAction) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\PropertiesBinder.cs:line 100
at NHibernate.Cfg.XmlHbmBinding.PropertiesBinder.Bind(IEnumerable`1 properties, IDictionary`2 inheritedMetas, Action`1 modifier) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\PropertiesBinder.cs:line 52
at NHibernate.Cfg.XmlHbmBinding.PropertiesBinder.Bind(IEnumerable`1 properties, IDictionary`2 inheritedMetas) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\PropertiesBinder.cs:line 47
at NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(HbmClass classSchema, IDictionary`2 inheritedMetas) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\RootClassBinder.cs:line 59
at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses(HbmClass rootClass, IDictionary`2 inheritedMetas) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\MappingRootBinder.cs:line 83
at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddEntitiesMappings(HbmMapping mappingSchema, IDictionary`2 inheritedMetas) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\MappingRootBinder.cs:line 42
at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(HbmMapping mappingSchema) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\XmlHbmBinding\MappingRootBinder.cs:line 29
at NHibernate.Cfg.Configuration.AddDeserializedMapping(HbmMapping mappingDocument, String documentFileName) in d:\CSharp\NH\NH\nhibernate\src\NHibernate\Cfg\Configuration.cs:line 522
InnerException:


The web.config:
Code:
  <configSections>
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
        <session-factory name="NHibernate.Test">
            <property name="connection.driver_class">
                NHibernate.Driver.SqlClientDriver
            </property>
            <property name="connection.connection_string">
                Data Source=*****;Initial Catalog=Shop;Integrated Security=True
            </property>
            <property name="adonet.batch_size">10</property>
            <property name="show_sql">true</property>
            <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
            <property name="use_outer_join">true</property>
            <property name="command_timeout">60</property>
            <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
            <property name="proxyfactory.factory_class">
                NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu
            </property>
        </session-factory>
    </hibernate-configuration>


The mapping file:
Code:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
    namespace="Agathas.Storefront.Model.Basket"
        assembly="Agathas.Storefront.Model">

    <class name="Basket" table="Baskets" lazy="false" >

        <id  name="Id" column="BasketId" type="guid">
            <generator class="guid" />
        </id>

        <bag name="Items" access="field.camelcase-underscore" inverse="true"
             cascade="all-delete-orphan" lazy="true" >
            <key column="BasketId"/>
            <one-to-many class="BasketItem"></one-to-many>
        </bag>

        <many-to-one access="field.camelcase-underscore" name="DeliveryOption"
                     class="Agathas.Storefront.Model.Shipping.DeliveryOption"
                     column="DeliveryOptionId"
                     not-null="true"/>
    </class>

</hibernate-mapping>

and finally, the class itself:
Code:
using System;
using System.Collections.Generic;
using System.Linq;
using Agathas.Storefront.Infrastructure.Domain;
using Agathas.Storefront.Model.Products;
using Agathas.Storefront.Model.Shipping;

namespace Agathas.Storefront.Model.Basket
{
    public class Basket : EntityBase<Guid>, IAggregateRoot
    {
        private IList<BasketItem> _items;
        private IDeliveryOption _deliveryOption;

        public Basket()
        {
            _items = new List<BasketItem>();
            _deliveryOption = new NullDeliveryOption();
        }

        public int NumberOfItems
        {
            get { return _items.Sum(i => i.Qty); }
        }

        public decimal BasketTotal
        {
            get { return ItemsTotal + DeliveryCost(); }
        }

        public decimal ItemsTotal
        {
            get { return _items.Sum(i => i.Qty * i.Product.Price); }
        }

        public void Add(Product product)
        {
            if (BasketContainsAnItemFor(product))
                GetItemFor(product).IncreaseItemQtyBy(1);
            else
                _items.Add(BasketItemFactory.CreateItemFor(product, this));
        }

        public BasketItem GetItemFor(Product product)
        {
            return _items.Where(i => i.Contains(product)).FirstOrDefault();
        }

        private bool BasketContainsAnItemFor(Product product)
        {
            return _items.Any(i => i.Contains(product));
        }

        public void Remove(Product product)
        {
            if (BasketContainsAnItemFor(product))
            {
                _items.Remove(GetItemFor(product));
            }
        }

        public void ChangeQtyOfProduct(int qty, Product product)
        {
            if (BasketContainsAnItemFor(product))
            {
                GetItemFor(product).ChangeItemQtyTo(qty);
            }
        }

        public int NumberOfItemsInBasket()
        {
            return _items.Sum(i => i.Qty);
        }

        public IEnumerable<BasketItem> Items()
        {
            return _items;
        }

        public decimal DeliveryCost()
        {
            return DeliveryOption.GetDeliveryChargeForBasketTotalOf(ItemsTotal);
        }

        public IDeliveryOption DeliveryOption
        {
            get { return _deliveryOption; }
        }

        public void SetDeliveryOption(IDeliveryOption deliveryOption)
        {
            _deliveryOption = deliveryOption;
        }

        protected override void Validate()
        {
            if (DeliveryOption == null)
                base.AddBrokenRule(BasketBusinessRules.DeliveryOptionRequired);

            foreach (BasketItem item in this.Items())
            {
                if (item.GetBrokenRules().Count() > 0)
                    base.AddBrokenRule(BasketBusinessRules.ItemInvalid);
            }
        }
    }

}


_items is a private field, which for some reason is causing the problem. Any ideas where I'm going wrong, here?


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.