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
-~----------~----~----~----~------~----~------~--~---