2012-03-14 67 views
1

我想在流利的nhibernate中使用組件,並得到以下錯誤。如何使用流利的Nhibernate組件

FluentNHibernate.Cfg.FluentConfigurationException:創建SessionFactory時使用了無效或不完整的配置。請參閱PotentialReasons集合和InnerException以獲取更多詳細信息。

下面的代碼看起來是正確的還是我錯過了什麼?

下面是對象IM ttrying重用

public class Thickness 
{ 
    public string Name { get; set; } 
    public byte ThicknessSize { get; set; } 
} 

我在實體類中實現它,如下

public class Liner 
{ 
    public virtual int Id { get; set; } 
    public virtual Thickness Thickness { get; set; } 
} 

的地圖爲實體

public class LinerMap : ClassMap<Liner> 
{ 
    public LinerMap() 
    { 
     Table("Liner"); 
     Id(l => l.Id); 
     Component(l => l.Thickness);    
    } 
} 

的配置看起來像下面

public static ISessionFactory CreateSessionFactory() 
    { 

     return Fluently.Configure() 
      .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c 
       .Server("XXXXX") 
       .Database("XXXXX") 
       .Username("XXXXXXXXXX") 
       .TrustedConnection())) 
      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Liner>()) 
      .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Thickness>()) 
      .BuildSessionFactory(); 
    } 

我已經注意到,流暢的維基說,這個功能並不適用於自動映射,因此香港專業教育學院明確使用了.mapping方法的工作,但林不知道這是否是足夠

任何想法會感激地歡迎

GB

+2

你看過InnerException(可能有其他的InnerExceptions)嗎?經常有線索埋在堆棧軌跡中。 – 2012-03-14 14:32:30

+0

另外,可以描述Component方法的作用以及它來自哪個名稱空間。我沒有看到它列在[ClassMap](http://fluentnhibernate.org/api/FluentNHibernate.Mapping/ClassMap%601.htm)文檔中。 – 2012-03-19 12:46:54

+0

由於您使用的是CLASSMAP,因此您丟失了自動映射。如果你想獲得自動映射,你需要使用OVERRIDES。 – BradLaney 2013-09-05 00:43:20

回答

1

做了一個小挖入Component method,如果你的代碼試圖利用其功能則需要另一個參數。我不知道爲什麼它甚至會編譯它的編寫方式,但它需要兩個參數,一個參數用於引用屬性,另一個描述該引用屬性的映射。

+0

稍後我會更好地瞭解組件方法。我已經通過流利的維基,但我會再看一遍,稍後再試。 – beaumondo 2012-03-20 09:11:19

+0

最後,我決定離開組件並創建不同的實體 – beaumondo 2012-03-26 09:06:36