2014-12-01 86 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