2010-11-22 13 views
4

NHibernateを初めて使用していますが、可能ならNHibernate Fluentを使用して設定ファイルを避けたいと思っていました。私はプロジェクトのセットアップを持っていると私はそれがそこには何も存続されていない文句エラーでGet<T>()方法に吹いていますが、単純に次NHibernate with Fluent - No persister for:[クラス]

[TestMethod] 
public void TestMethod1() 
{ 
    var cfg = Fluently.Configure() 
     .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.Is("[ConnectionStringHere"))) 
     .Mappings(m => m.FluentMappings.AddFromAssemblyOf<RedSand.Models.Data.Mapping.AddressMapping>()); 

    var sessionFactory = cfg.BuildSessionFactory(); 

    var session = sessionFactory.OpenSession(); 

    session.Get<Address>(new Guid("A8B9BA39-425D-4AE6-A72E-00216ABC87C4")); 
} 

を使用してアドレスオブジェクトのクエリを実行しようとしています。私のアドレスクラスは以下の通りです。

public class Address 
{ 
    public Guid AddressId { get; set; } 
    public string AddressType { get; set; } 
    public string StreetAddress { get; set; } 
    public Guid CityId { get; set; } 
    public string PostalCode { get; set; } 
    public bool DefaultAddress { get; set; } 
    public bool TermAddress { get; set; } 
    public string SuiteNumber { get; set; } 
    public float Latitude { get; set; } 
    public float Longitude { get; set; } 
    public int Accuracy { get; set; } 
} 

public class AddressMapping : ClassMap<Address> 
{ 
    public AddressMapping() 
    { 
     Table("tblAddress"); 
     Not.LazyLoad(); 
     Id(a => a.AddressId).Column("AddressID").GeneratedBy.Guid(); 
     Map(a => a.StreetAddress).Column("Address").Length(100); 
     Map(a => a.CityId).Column("CityID"); 
     Map(a => a.PostalCode).Length(50); 
     Map(a => a.DefaultAddress); 
     Map(a => a.TermAddress).Default("0"); 
     Map(a => a.SuiteNumber).Column("SuiteNo").Length(50); 
     Map(a => a.Latitude); 
     Map(a => a.Longitude); 
     Map(a => a.Accuracy); 
    } 
} 

私は既存のデータベースを使用していますので、ファンキーなテーブル構造/名前を無視してみてください。

ここに何か不足していますか?なぜあなたはNo persisterについて不平を言っているのかを説明する何かを見ることができますか?

+0

私はこれを複製しようとしましたが、失敗することはありません。 2つの別々の "Address"クラスが定義されていませんか? – mxmissile

+0

多分私は同じことをして、新しいアプリケーションを作成して自分自身のエラーを複製しようとしました。それはエラーを引き起こすでしょうか? –

答えて

3

AddFromAssemblyOfのアセンブリは、マッピングファイルではなく、マップされたクラスである必要があります。 AddressMappingとは異なるアセンブリ内のAddressですか?それをAddFromAssemblyOf<YourNamespace.Address>に変更してみてください。

+0

'Address'クラスのネームスペースは既に 'AddFromAssemblyOf ()'の呼び出しで完全に解決されていますので、ネームスペースを解決するのは問題ではないと思います。以前はアセンブリ全体を追加していましたが、複雑さを取り除くために、1つの「Address」クラスに減らしました。これをテストするために使用しているコードは別のプロジェクトにあります。はい、MVCアプリケーションで作成したテストプロジェクトですが、MVCアプリケーションで同じエラーが発生した後にテストプロジェクトに移動しました。 –

+0

クラップ!私はちょうどあなたが意味するものに気づいた。 'AddFromAssemblyOf ()'を呼び出すのではなく、 'Get ()'メソッドで完全に解決する必要があります。私は気づいていない別のリファレンスで定義されたAddressクラスを持っていたことがわかりました。このプロジェクトで作成したものではなく、そのクラスにデフォルト設定されていました。私はこのような小さなバグが嫌いです。時にはそれを整理するために目の第二のセットが必要なだけです。 –

+0

実際に私は 'AddFromAssemblyOf 'メソッドを意味しました。しかし、私はそれが正しい方向にあなたを指摘してうれしいです。 –