2014-12-01 76 views
0

我在数据库中的表仅用于持有一些ID的描述:NHibernate的流利映射一个String属性到另一个表的列

TABLE SomeClass 
- Columns 
- ClassTypeID INT CONSTRAINT etc 

TABLE SomeClassTypes 
- ClassTypeID INT IDENTITY 
- Description NVARCHAR 

它就像这样,所以很容易让用户插入/删除新的类型。 我想所有的SomeClass的报告,但我想有一个字符串属性来保存从另一个表中的描述:

public class SomeClass 
{ 
    public virtual int SomeClassID { get; set; } 
    public virtual int ClassTypeID { get; set; } 
    public virtual string DescriptionType { get; set; } 
} 

public class SomeClassMap : ClassMapping<SomeClass> 
{ 
    public SomeClassMap() 
    { 
     Table("SomeClassTable"); 
     Property(p => p.SomeClassID, map => 
     { 
      map.Column("SomeClassID"); 
      map.Generator(Generators.Identity); 
     }); 
     Property(p => p.ClassTypeID, map => map.Column("ClassTypeID")); 
     //Other properties here 

     Property(p => p.DescriptionType, ?); //This line 
    } 
} 

我怎样才能做到这一点?

回答

0

尝试使用连接表。

public class SomeClassMap : ClassMapping<SomeClass> 
{ 
public SomeClassMap() 
{ 
    Table("SomeClassTable"); 
    Property(p => p.SomeClassID, map => 
    { 
     map.Column("SomeClassID"); 
     map.Generator(Generators.Identity); 
    }); 
    Property(p => p.ClassTypeID, map => map.Column("ClassTypeID")); 
    //Other properties here 

    Join("SomeClassTypes", m => 
     { 
      m.KeyColumn("ClassTypeId"); 
      m.Fetch.Join(); 
      m.Map(x => x.DescriptionType).Column("Description"); 
     }) 
} 
} 

EDITED

如果使用内置的NHibernate流利的映射,试试这个:

public class SomeClassMap : ClassMapping<SomeClass> 
{ 
    public SomeClassMap() 
    { 
     Table("SomeClassTable"); 
     Property(p => p.SomeClassID, map => 
     { 
      map.Column("SomeClassID"); 
      map.Generator(Generators.Identity); 
     }); 
     Property(p => p.ClassTypeID, map => map.Column("ClassTypeID")); 
     //Other properties here 

     Property(p => p.DescriptionType, ?); //This line 
     Join("SomeClassTypes", m => 
      { 
       m.Key(k => k.Column("ClassTypeId")); 
       m.Fetch(FetchKind.Join); 
       m.Property(x => x.DescriptionType).Column("Description"); 
      }); 
    } 
} 
+0

我试图做这样的,但智能感知不显示任何的这些功能。我检查过版本,它是'3.3.2',我在NHForge中找到的最新版本是'3.3.3'。也许我错过了一些东西,但是我需要使用'KeyColumn','Fetch.Join()',甚至是Map()。Column()'? – Danicco 2014-12-01 19:34:02

+0

你可以用Join子句显示你的映射吗? Plz注意,连接表的KeyColumn,Fetch.Join和Map方法必须在Join的lambda表达式中调用, – 2014-12-01 20:29:01

+0

顺便说一句,您使用的是哪种版本的FluentNHibernate? (我的版本是1.2.0) – 2014-12-01 20:31:54