2011-11-23 27 views
0

我有一個對象網站,像這樣的流利NHibernate的映射關係在模式間

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();

如何在兩個相關對象處於不同模式中時映射此對象?

+0

你檢查,有在DB匹配的站點行?如果它是一個錯誤的模式,你會得到一個sql-exception,指出表(在錯誤的模式中)找不到 – Firo

回答

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)); 
     }); 
    } 
}