Your meta-type is string ("Foo","Bar"), so you have to specify
MetaType=typeof(string).
see here:
http://www.castleproject.org/activerecord/documentation/trunk/usersguide/relations/hasmanytoany.html-Markus 2009/8/6 jsmorris <[email protected]> > Here are the hbm files that are generated when I include the [Any] > attribute on the Journal.Journalable property. > > On Wed, Aug 5, 2009 at 9:46 PM, Markus Zywitza<[email protected]> > wrote: > > Can you send in the generated hbm files? You'll have to specify > debug="true" > > in your config for them to be written to disk. > > > > -Markus > > > > 2009/8/5 jsmorris <[email protected]> > >> > >> Thanks for your continued help Markus. I now understand what you are > >> saying about the HasMany side of this relationship and was able to > >> make it work! But, now the BelongsTo/Any side of the relationship is > >> throwing an error. I attempted to use this mapping on my Journal > >> object to reference which object this Journal belongs to (either Foo, > >> Bar, or any other IJournalable object). > >> > >> [Any(IdType = typeof(Int32), MetaType = typeof(IJournalable), > >> TypeColumn = "JournalableType", IdColumn = "JournalableId", Cascade = > >> CascadeEnum.SaveUpdate)] > >> [Any.MetaValue("Foo", typeof(Foo))] > >> [Any.MetaValue("Bar", typeof(Bar))] > >> public IJournalable Journalable { get; set; } > >> > >> But, got the below errors. I am not sure, even reading the inner > >> exception, that I know where to start looking. > >> > >> Jason > >> > >> System.NullReferenceException: Object reference not set to an instance > >> of an object. > >> at NHibernate.Cfg.XmlHbmBinding.ClassBinder.BindAny(XmlNode node, Any > >> model, Boolean isNullable) > >> at NHibernate.Cfg.XmlHbmBinding.ClassBinder.PropertiesFromXML(XmlNode > >> node, PersistentClass model, IDictionary`2 inheritedMetas, UniqueKey > >> uniqueKey, Boolean mutable, Boolean nullable, Boolean naturalId) > >> at NHibernate.Cfg.XmlHbmBinding.RootClassBinder.Bind(XmlNode node, > >> HbmClass classSchema, IDictionary`2 inheritedMetas) > >> at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.AddRootClasses(XmlNode > >> parentNode, IDictionary`2 inheritedMetas) > >> at NHibernate.Cfg.XmlHbmBinding.MappingRootBinder.Bind(XmlNode node) > >> at NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument > doc) > >> NHibernate.MappingException: Could not compile the mapping document: > >> (string) > >> at NHibernate.Cfg.Configuration.LogAndThrow(Exception exception) > >> at NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument > doc) > >> at NHibernate.Cfg.Configuration.ProcessMappingsQueue() > >> at NHibernate.Cfg.Configuration.AddDocumentThroughQueue(NamedXmlDocument > >> document) > >> at NHibernate.Cfg.Configuration.AddXmlReader(XmlReader hbmReader, String > >> name) > >> at NHibernate.Cfg.Configuration.AddXml(String xml, String name) > >> at NHibernate.Cfg.Configuration.AddXmlString(String xml) > >> at Castle.ActiveRecord.ActiveRecordStarter.AddXmlString(Configuration > >> config, String xml, ActiveRecordModel model) in > >> > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: > >> line 761 > >> Castle.ActiveRecord.Framework.ActiveRecordException: Error adding > >> information from class Intel.TraX.Tests.Data.Store.Journal to > >> NHibernate. Check the inner exception for more information > >> at Castle.ActiveRecord.ActiveRecordStarter.AddXmlString(Configuration > >> config, String xml, ActiveRecordModel model) in > >> > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: > >> line 765 > >> at > >> > Castle.ActiveRecord.ActiveRecordStarter.AddXmlToNHibernateCfg(ISessionFactoryHolder > >> holder, ActiveRecordModelCollection models) in > >> > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: > >> line 751 > >> at > >> > Castle.ActiveRecord.ActiveRecordStarter.RegisterTypes(ISessionFactoryHolder > >> holder, IConfigurationSource source, IEnumerable`1 types, Boolean > >> ignoreProblematicTypes) in > >> > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: > >> line 933 > >> at > Castle.ActiveRecord.ActiveRecordStarter.Initialize(IConfigurationSource > >> source, Type[] types) in > >> > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: > >> line 200 > >> at Castle.ActiveRecord.ActiveRecordStarter.Initialize(Assembly[] > >> assemblies, IConfigurationSource source, Type[] additionalTypes) in > >> > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\ActiveRecord\Castle.ActiveRecord\Framework\ActiveRecordStarter.cs: > >> line 223 > >> at > >> > Castle.Facilities.ActiveRecordIntegration.ActiveRecordFacility.InitializeFramework(ArrayList > >> assemblies) in > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\Facilities\ActiveRecordIntegration\Castle.Facilities.ActiveRecordIntegration\ActiveRecordFacility.cs: > >> line 147 > >> at Castle.Facilities.ActiveRecordIntegration.ActiveRecordFacility.Init() > >> in > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\Facilities\ActiveRecordIntegration\Castle.Facilities.ActiveRecordIntegration\ActiveRecordFacility.cs: > >> line 107 > >> at Castle.MicroKernel.Facilities.AbstractFacility.Init(IKernel kernel, > >> IConfiguration facilityConfig) in > >> > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\InversionOfControl\Castle.MicroKernel\Facilities\AbstractFacility.cs: > >> line 69 > >> at Castle.MicroKernel.DefaultKernel.AddFacility(String key, IFacility > >> facility) in > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\InversionOfControl\Castle.MicroKernel\DefaultKernel.cs: > >> line 515 > >> at Castle.Windsor.WindsorContainer.AddFacility(String key, IFacility > >> facility) in > >> > c:\TeamCity\buildAgent\work\7e4107d1782544ec\InversionOfControl\Castle.Windsor\WindsorContainer.cs: > >> line 261 > >> at Intel.TraX.Web.IoCContainer.RegisterFacilities() in IoCContainer.cs: > >> line 57 > >> at Intel.TraX.Web.IoCContainer..ctor(String configFileName) in > >> IoCContainer.cs: line 34 > >> at Intel.TraX.Tests.BasePersistenceTestFixture.TestFixtureSetUp() in > >> BasePersistenceTestFixture.cs: line 37 > >> > >> > >> > >> On Wed, Aug 5, 2009 at 10:18 AM, Markus Zywitza< > [email protected]> > >> wrote: > >> > Maybe I was unclear. BelongsTo won't help here, Any is the reight > >> > attribute. > >> > You have to specify > >> > > >> > HasMany(typeof(Journal), ColumnKey="...", Table="...") > >> > > >> > This should work. > >> > -Markus > >> > 2009/8/4 jsmorris <[email protected]> > >> >> > >> >> Moved from dev list...my apologies for asking my question on the > wrong > >> >> list. > >> >> > >> >> I now understand that I need the BelongsTo, but my problem is > >> >> constructing the correct BelongsTo in this situation. All my > attempts > >> >> have failed. > >> >> > >> >> So, my Journal class needs a BelongsTo to associate it to either a > Foo > >> >> or Bar, so if I define this > >> >> > >> >> [BelongsTo("JournalableId", Table = "Journals")] > >> >> public IJournalable Journalable { get; set; } > >> >> > >> >> I get the the error message. If I type the property to either of my > >> >> concrete types Foo or Bar, I do not get an error. > >> >> > >> >> [BelongsTo("JournalableId", Table = "Journals")] > >> >> public Foo Journalable { get; set; } > >> >> > >> >> or > >> >> > >> >> [BelongsTo("JournalableId", Table = "Journals")] > >> >> public Bar Journalable { get; set; } > >> >> > >> >> I feel that I need to be able to specify a type to the BelongsTo. I > >> >> was attempting to use the Any attribute to specify my metatype, > >> >> IJournalable, as well as the concrete types, Foo and Bar, for this > >> >> association. I believe that my Journals table would end up with > >> >> columns Id, JournalableId, JournalableType where JournalableType > would > >> >> be either Foo or Bar. > >> >> > >> >> Is this type of association even possible? > >> >> > >> >> Thanks, > >> >> Jason > >> >> > >> >> > >> >> > >> >> On Fri, Jul 31, 2009 at 7:34 PM, Markus > >> >> Zywitza<[email protected]> > >> >> wrote: > >> >> > Hint: It's already explained in the exception: If you don't have a > >> >> > BelongsTo > >> >> > (Any doesn't count), you need to specify ColumnKey and Table. > >> >> > > >> >> > -Markus > >> >> > > >> >> > 2009/7/31 jsmorris <[email protected]> > >> >> >> > >> >> >> I am having trouble setting up my AR relationships. I have tried > so > >> >> >> many things, but nothing seems to work. Here is what I am trying > to > >> >> >> do. > >> >> >> > >> >> >> Foo has many Journals. Bar has many Journals. A Journal can > belong > >> >> >> to > >> >> >> either Foo or Bar. > >> >> >> > >> >> >> If I try the mapping I have below, I get the following error > >> >> >> > >> >> >> Castle.ActiveRecord.Framework.ActiveRecordException: ActiveRecord > >> >> >> tried to infer details about the relation Bar.Journals but it > could > >> >> >> not find a 'BelongsTo' mapped property in the target type > >> >> >> Intel.TraX.Tests.Data.Store.Journal > >> >> >> > >> >> >> I am probably way off on what needs to be done, but I am looking > for > >> >> >> any help to point me in the right direction. > >> >> >> > >> >> >> Thanks, > >> >> >> Jason > >> >> >> > >> >> >> [ActiveRecord] > >> >> >> public class Journal : DomainObject<Journal> > >> >> >> { > >> >> >> [Any(typeof(Int32), MetaType = typeof(IJournalable), > >> >> >> TypeColumn = "JournalableType", IdColumn = "JournalableId", > Cascade > >> >> >> = > >> >> >> CascadeEnum.SaveUpdate)] > >> >> >> [Any.MetaValue("Foo", typeof(Foo))] > >> >> >> [Any.MetaValue("Bar", typeof(Bar))] > >> >> >> public IJournalable Journalable { get; set; } > >> >> >> } > >> >> >> > >> >> >> public interface IJournalable {} > >> >> >> > >> >> >> [ActiveRecord] > >> >> >> public class Foo : DomainObject<Foo>, IJournalable > >> >> >> { > >> >> >> [HasMany(ColumnKey = "JournalableId")] > >> >> >> public IList<Journal> Journals { get; set; } > >> >> >> } > >> >> >> > >> >> >> [ActiveRecord] > >> >> >> public class Bar : DomainObject<Bar>, IJournalable > >> >> >> { > >> >> >> [HasMany(ColumnKey = "JournalableId")] > >> >> >> public IList<Journal> Journals { get; set; } > >> >> >> } > >> >> >> } > >> >> >> > >> >> >> > >> >> > > >> >> > > >> >> > > > >> >> > > >> >> >> > >> > > >> > >> > > > > > > > > > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Castle Project Users" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/castle-project-users?hl=en -~----------~----~----~----~------~----~------~--~---
