2017-06-15 8 views
0

のための欲望者まず、私はグーグルで、同様の問題をここで読んで、そのうちのどれも助けなかった。 しかし、私は本当に重要なことを忘れていますか?ここでは、このチュートリアルを手に入れた モデルエラー

、それに固執しようとした(しかし、多分私は本当に問題ないものを何かを欠場?) http://www.infoworld.com/article/3030212/application-development/how-to-work-with-fluent-nhibernate-in-c.html

だから、私のNHibernateはヘルパーをHERES:

public static class NHibernateHelper 
    { 
     public static ISession OpenSession() 
     { 
      string connectionString = ConfigurationManager.ConnectionStrings["WebAuthTest"].ConnectionString; 

      ISessionFactory sessionFactory = Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString).ShowSql()) 
       .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Product>()) 
       .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true)) 
       .BuildSessionFactory(); 

      return sessionFactory.OpenSession(); 

     } 
} 

のWeb.config接続文字列:

<connectionStrings> 
    <add name="WebAuthTest" connectionString="data source=localhost;initial catalog=TestAuthDatabase;persist security info=True;Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

のapp.config:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.1.0.4000" newVersion="4.1.0.4000" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

そして、それは私が、コントローラを呼び出した直後に、ここで失敗する:

public class TestController: ApiController 
    { 
     private readonly ITestService _testService; 

     public TestController() 
     { 

     } 

     public TestController(ITestService tst) 
     { 
      _testService = tst; 
      using (ISession session = NHibernateHelper.OpenSession()) 

      { 

       var product = new Product { Name = "Lenovo Laptop", Description = "Sample product" }; 

       session.SaveOrUpdate(product); 

      } 
     } 

     public string Get() 
     { 
      var message = string.Format("The current data on the server is: {0}", _testService.TestFunction()); 
      return message; 
     } 
    } 

スタックトレース:

NHibernate.ImplでNHibernate.Impl.SessionFactoryImpl.GetEntityPersister(文字列 エンティティネーム)で、 .SessionImpl.GetEntityPersister(String entityName、 オブジェクトobj)を に設定します。NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object エンティティ、ストリングe ntityNameは、 NHibernate.Eventで NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent イベント)で NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent イベント)で何でも、IEventSourceソース、 ブールrequiresImmediateIdAccessを)オブジェクト。 NHibernate.Impl.SessionImpl.Save(オブジェクトOBJでNHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent イベント)で NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent イベント)でDefault.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent イベント) )

彼らは記事にある権利として

マッピングとモデルが、それでも:

public class Product 

    { 

     public virtual int Id { get; set; } 

     public virtual string Name { get; set; } 

     public virtual string Description { get; set; } 

    } 

    public class ProductMap : ClassMap<Product> 
     { 
      public ProductMap() 
      { 
       Id(x => x.Id); 
       Map(x => x.Name); 
       Map(x => x.Description); 
       Table("Product"); 
      } 

     } 

UPD

解決しました。 @stuartdはこのチュートリアルについては間違っていましたが、それは間違っています

+0

[質問タイトルにタグを入れないでください] – Liam

+0

@Liam oh、大丈夫、それに慣れました。 – DanilGholtsman

+1

答えはありませんが、セッションを開くたびにSessionFactoryを作成すべきではありません。そのため、このチュートリアルが疑わしいのです。 [NHibernate SessionFactoryが一度しか作成されないようにする](https://stackoverflow.com/questions/2362195/ensure-nhibernate-sessionfactory-is-only-created-once?rq=1) – stuartd

答えて

0

私はあまりにも愚かでした。 もう一度グーグルで働いてきました。

答えはここに私を助け:no persister for: Fluent nHibernate Exception

だから、私の場合には .Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMap>())は、問題を解決しました。

ありがとう、皆さん!

関連する問題