跨模式的流畅的Nhibernate映射关系

时间:2011-11-23 21:01:36

标签: c# fluent-nhibernate schema fluent-nhibernate-mapping

我有一个对象Site,就像这样

public class Site
{
    public virtual int SiteId { get; set; }

    public virtual Options Options { get; set; }
}

我有一个选项对象

public class Options
{
    public virtual int OptionsId { get; set; }

    private int SiteId { get; set; }
    private Site Site { get; set; }
}

这里需要注意的是,我无法在Site表中添加任何字段。在过去,我做过这样的映射

public class SiteMap : ClassMap<Site>
{
    public SiteMap()
    {
        Table("Sites");

        HasOne<Options>(x => x.Options)
                .Cascade.All();
    }
}

public class OptionsMap : ClassMap<Options>
{
    public OptionsMap()
    {
        Table("Options");

        Id(Reveal.Property<Options>("SiteId")).GeneratedBy.Foreign("Site");

        HasOne<Site>(Reveal.Member<Options, Site>("Site"))
                .Constrained()
                .ForeignKey();
    }
}

这总是很棒。除了一个小的snaffu - 我的选项表在不同的模式中。我已将Schema("MySchema");添加到我的Options对象的映射中,但是当我尝试获取某个网站时,我什么都没收到。我很确定我的问题是.ForeignKey();

当两个相关对象在不同的​​模式中时,如何映射?

1 个答案:

答案 0 :(得分:1)

还有另一个映射选项:

class SiteMap : ClassMap<Site>
{
    public SiteMap()
    {
        Join("MySchema.Options", join =>
        {
            join.KeyColumn("SiteId");
            join.Component(x => x.Options, c => c.Map(x => x.Prop1));
        });
    }
}