2009-05-10 33 views
4

Fluent Nhibernateを使用して複数のテーブルをマップしようとしています。コレクションを初期化できませんでした: NHibernate.Exceptions.GenericADOException:私のテストは私に次のエラーを与えている[FluentWeb.Domain.Employees.Orders#1]Fluent NHibernate Mapping Issue

私は従業員との間には多くの関係に1をマッピングしようとしています注文。注文には、製品との多対多の関係があります(NorthWind)。ここに私のマッピングがあります..誰かが私に手を差し伸べることができますか?すべてがHBMと協力していた。

public class EmployeeMap : ClassMap<Employees> 
{ 

    public EmployeeMap() 
    { 
     Id(x => x.EmployeeID); 
     Map(x => x.FirstName); 
     Map(x => x.LastName); 
     Map(x => x.City); 
     Map(x => x.HireDate); 
     Map(x => x.Title); 
     HasMany(x => x.Orders) 
      .AsBag().WithForeignKeyConstraintName("EmployeeID") 
      .Inverse() 
      .Cascade.All(); 


    } 
} 

public class OrdersMap : ClassMap<Orders> 
{ 
    public OrdersMap() 
    { 
     Id(x => x.OrderID); 
     Map(x => x.OrderDate); 
     Map(x => x.RequiredDate); 
     Map(x => x.ShippedDate); 
     References(x => x.Employee); 
     HasManyToMany(x => x.Products) 
      .Cascade.All() 
      .WithTableName("Order Details"); 

    } 
} 

public class ProductsMap : ClassMap<Products> 
{ 
    public ProductsMap() 
    { 
     Id(x => x.ProductID); 
     Map(x => x.ProductName); 
     Map(x => x.UnitPrice); 
     HasManyToMany(x => x.Orders) 
      .Cascade.All() 
      .Inverse() 
      .WithTableName("Order Details"); 


    } 
} 

詳細情報が必要な場合はお知らせください。助けてくれてありがとう!

-nick

+0

生成されたマッピングファイルとSQL Createスクリプトをダンプして調べましたか? –

答えて

2

テーブル名のスペースは、通常、かなり悪い考えです。それらを削除できない場合は、NHibernateのデータベースにとらわれないエスケープメカニズムであるバックティックのテーブル名を囲んでみてください。

.WithTableName("`Order Details`'); 
+0

右...私はNorhtwind DBを使ってテストしています。だからあなたは問題が "WithTableName()"であることを示唆していますか?私はこれを試してみる。 – Nick

+0

一般的には、プレーンSQLを使用する場合、空白を含むテーブル名をエスケープする必要があるため、おそらくNHで同じことをする必要があります。 –