开发者

FluentNHibernate, getting 1 column from another table

开发者 https://www.devze.com 2023-01-01 04:56 出处:网络
We\'re using FluentNHibernate and we have run into a problem where our object model requires data from two tables like so:

We're using FluentNHibernate and we have run into a problem where our object model requires data from two tables like so:

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; se开发者_JAVA百科t; }
}

Where there is a MyModel table that has Id, Name, and FooId as a foreign key into the Foo table. The Foo tables contains Id and FooName.

This problem is very similar to another post here: Nhibernate: join tables and get single column from other table but I am trying to figure out how to do it with FluentNHibernate.

I can make the Id, Name, and FooId very easily..but mapping FooName I am having trouble with. This is my class map:

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

with that mapping I get this error:

The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has invalid child element 'join' in namespace 'urn:nhibernate-mapping-2.2'. List of possible elements expected: 'joined-subclass, loader, sql-insert, sql-update, sql-delete, filter, resultset, query, sql-query' in namespace 'urn:nhibernate-mapping-2.2'.

any ideas?


I think you misunderstood something here.

Instead of having Id, Name, FooId and FooName in same class you need to create two classes

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

And your mapping classes for these:

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

this should help.

But remember Convention other Configuration :)

0

精彩评论

暂无评论...
验证码 换一张
取 消