fluent nhibernate component one-to-many

孤街醉人 提交于 2019-12-18 09:37:28

问题


I have couple of classes and want to map them correctly to database:

public class A
{
    public virtual Guid Id { get; private set; }
    public virtual ComponentClass Component { get; set; }
}

public class ComponentClass 
{
    public virtual IList<B> Elements { get;set; }
}

public class B
{
    public virtual Guid Id { get; private set; }
    public virtual DateTime Time { get; set; }
}

I map them using fluent mappings like that:

public class AMap : ClassMap<A> 
{
    public A() {
        Id(x => x.Id);
        Component(x => x.Component,
                  c => c.HasMany(x => x.Elements).Inverse().Cascade.All());
    }
}

public class BMap : ClassMap<B>
{
    public B() {
        Id(x => x.Id);
        Map(x => x.Time);
    }
}

When I save my entity, I have class A mapped to one table and class B to another as expected. But I have nulls in Component_id column. Can you tell me what am I missing here?


回答1:


I believe Components are supposed to be in the same table , as clearly stated in Ayende's blog post, as they serve only to make the data better represented as an object model. Be sure to read through his blog, it's probably one of the best nHibernate resources out there.




回答2:


Ok, I've resolved my problem - I can use Id of my "parent" class. So the component mapping will become:

public class AMap : ClassMap<A> 
{
    public A() {
        Id(x => x.Id);
        Component(x => x.Component,
                  c => c.HasMany(x => x.Elements).Cascade.All().Column("Id"));
    }
}

So obvious as I look at it now ... but It took me an hour.




回答3:


If you have a one-to-many association direct to a collection of components (ie. without the ComponentClass wrapper as per the question) then you can map it directly:

HasMany(x => x.Elements)
    .AsSet()
    .Table("ElementTable")
    .KeyColumn("KeyColumn")
    .Cascade.All()
    .Component(x =>
    {
        x.Map(c => c.Id);
        x.Map(c => c.Time);
    })
    .LazyLoad();


来源:https://stackoverflow.com/questions/4250749/fluent-nhibernate-component-one-to-many

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!