2013-02-25 44 views
1

我已經通過的NuGet安裝NHibernate.3.3.2.4000到我MVC3項目,將其配置沒有proxyfactory.factory_classNHibernate的ProxyFactory裏

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory>   
     <property name="dialect">NHibernate.Dialect.MsSql2008Dialect, NHibernate</property> 
     <property name="connection.connection_string_name">db</property> 
     <property name="adonet.batch_size">50</property> 
     <property name="current_session_context_class">web</property> 
     <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property> 
     <mapping assembly="TheWorkshop.DomainModel" /> 
    </session-factory> 
</hibernate-configuration> 

,但這樣我得到了以下錯誤:

The following types may not be used as proxies: TheWorkshop.DomainModel.Contact: method set_DateAdded should be 'public/protected virtual' or 'protected internal virtual'

凡DateAdded屬性私下設置DateAdded值

public virtual DateTime DateAdded 
{ 
    get { return _dateAdded; } 
    private set { _dateAdded = DateTime.Now; } 
} 

我不是特別想讓setter公開,想法是DateAdded是自動設置的。

我已經看到,暗示我可以設置崗位proxyfactory.factory_class

<property name="proxyfactory.factory_class"> 
    NHibernate.ByteCode.Castle.ProxyFactoryFactory, 
    NHibernate.ByteCode.Castle 
</property> 

但安裝的NuGet沒有打倒任何引用NHibernate.ByteCode.Castle,當我試圖Install-Package NHibernate.Castle它未能與

Install failed. Rolling back...
Install-Package : Already referencing a newer version of 'NHibernate'.
At line:1 char:16
+ Install-Package <<<< NHibernate.Castle
+ CategoryInfo : NotSpecified: (:) [Install-Package], InvalidOperationException
+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

所以我想我可以下來版本的NHibernate,但那似乎是錯誤的... 什麼應該我這樣做,類似的問題NuGet: NHibernate, Castle.Core 3.0 and where is ProxyFactoryFactory?說的I並不需要在新版本中

The last versions of NHibernate do not require configuring a proxy factory.
An internal one is used by default and the old adapters are not part of the project anymore.

回答

3
  1. 你,除非你使用Castle.Core代理工廠就像你在第二部分做了不一定需要Castle.Core配置proxyfactory.factory_class。 NHibernate自帶默認代理工廠,這是你第一次,所以我不會對Castle.Core部分發表評論(我認爲它不會對最新的nhibernate有效)
  2. 你可以解決通過告訴nhibernate你不想延遲加載類(這是默認啓用的),你的錯誤。你如何做到這一點將取決於你如何做你的映射。
  3. 您可以通過使setter受保護而不是私人來消除錯誤。
  4. 我不認爲你的二傳手實際上像你認爲的那樣工作。除非你真的用一個值來設置該屬性,否則它永遠不會獲得當前的日期/時間,在這種情況下,你可能只需使用DateTime.Now來設置它,而不是你所擁有的。此外,當nhibernate加載時,您將獲得當前日期,而不是它創建的實際日期/時間。您應該在構造函數中設置值,而不是像您那樣劫持setter。
+0

這就是它,我刪除了setter - 我在構造函數中設置值,所以不知道當我編寫setter時我在想什麼。花了我很多時間寫下這個問題,大約5秒鐘來修復! – 2013-02-25 21:44:01

相關問題