FluentNHibernate,从另一个表中获取1列

时间:2010-05-28 16:59:42

标签: nhibernate fluent-nhibernate join

我们正在使用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'。

任何想法?

1 个答案:

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

这应该有所帮助。

但请记住约会其他配置:)