我们正在使用FluentNHibernate,我们遇到了一个问题,我们的对象模型需要来自两个表的数据,如下所示:
public class MyModel
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int FooId { get; set; }
public virtual string FooName { get; set; }
}
有一个MyModel表,其中Id,Name和FooId作为Foo表中的外键。 Foo表包含Id和FooName。
此问题与此处的另一篇文章非常相似:Nhibernate: join tables and get single column from other table但我正在尝试弄清楚如何使用FluentNHibernate。
我可以非常轻松地制作Id,Name和FooId ..但是映射FooName我遇到了麻烦。这是我的班级地图:
public class MyModelClassMap : ClassMap<MyModel>
{
public MyModelClassMap()
{
this.Id(a => a.Id).Column("AccountId").GeneratedBy.Identity();
this.Map(a => a.Name);
this.Map(a => a.FooId);
// my attempt to map FooName but it doesn't work
this.Join("Foo", join => join.KeyColumn("FooId").Map(a => a.FooName));
}
}
使用该映射我收到此错误:
命名空间'urn:nhibernate-mapping-2.2'中的元素'class'在命名空间'urn:nhibernate-mapping-2.2'中具有无效的子元素'join'。期望的可能元素列表:在命名空间'urn:nhibernate-mapping-2.2'中的'joined-subclass,loader,sql-insert,sql-update,sql-delete,filter,resultset,query,sql-query'。
任何想法?
答案 0 :(得分:0)
我觉得你在这里误解了一些东西。
您需要创建两个类,而不是在同一个类中使用Id,Name,FooId和FooName
public class MyModel
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Foo Foo { get; set; }
}
public class Foo
{
public virtual int Id { get; set; }
public virtual string FooName { get; set; }
}
您的映射类:
public class MyModelMapping : ClassMap<MyModel>
{
public MyModelMapping()
{
this.Id(x => x.Id);
this.Map(x => x.Name);
this.References(x => x.Foo);
}
}
public class FooMapping : ClassMap<Foo>
{
public FooMapping()
{
this.Id(x => x.Id);
this.Map(x => x.FooName);
}
}
这应该有所帮助。
但请记住约会其他配置:)