C# 流畅的Nhibernate跨模式映射关系
我有一个对象站点,像这样C# 流畅的Nhibernate跨模式映射关系,c#,fluent-nhibernate,schema,fluent-nhibernate-mapping,C#,Fluent Nhibernate,Schema,Fluent Nhibernate Mapping,我有一个对象站点,像这样 public class Site { public virtual int SiteId { get; set; } public virtual Options Options { get; set; } } public class SiteMap : ClassMap<Site> { public SiteMap() { Table("Sites"); HasOne<Opti
public class Site
{
public virtual int SiteId { get; set; }
public virtual Options Options { get; set; }
}
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();
}
}
我有一个选项对象
public class Options
{
public virtual int OptionsId { get; set; }
private int SiteId { get; set; }
private Site Site { get; set; }
}
这里需要注意的是,我不能向站点
表中添加任何字段。在过去,我做过这样的映射
public class Site
{
public virtual int SiteId { get; set; }
public virtual Options Options { get; set; }
}
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();
}
}
公共类站点地图:类地图
{
公共网站地图()
{
表(“现场”);
HasOne(x=>x.Options)
.Cascade.All();
}
}
公共类选项映射:类映射
{
公共选项映射()
{
表(“期权”);
Id(discover.Property(“SiteId”))。由.Foreign(“Site”)生成;
HasOne(揭露成员(“网站”))
.受约束的()
.ForeignKey();
}
}
这一直很有效。除了一个小问题,我的选项表在不同的模式中。我添加了Schema(“MySchema”)
到我的选项
对象的映射,但是当我尝试获取站点时,我什么也得不到。我很确定我的问题是.ForeignKey()代码>
当两个相关对象位于不同的模式中时,如何映射该对象?还有另一个映射选项:
class SiteMap : ClassMap<Site>
{
public SiteMap()
{
Join("MySchema.Options", join =>
{
join.KeyColumn("SiteId");
join.Component(x => x.Options, c => c.Map(x => x.Prop1));
});
}
}
classsitemap:ClassMap
{
公共网站地图()
{
Join(“MySchema.Options”,Join=>
{
join.KeyColumn(“SiteId”);
组件(x=>x.Options,c=>c.Map(x=>x.Prop1));
});
}
}
您是否已检查数据库中是否有匹配的站点行?如果它是一个错误的模式,您将得到一个sql异常,说明无法找到该表(在错误的模式中)