2009-05-10 8 views
4

J'essaye de mapper plusieurs tables en utilisant le Nhibernate Fluent. Mes tests me donnent l'erreur suivante: NHibernate.Exceptions.GenericADOException: Impossible d'initialiser une collection: [FluentWeb.Domain.Employees.Orders # 1]Mappage NHibernate Fluent Édition

Je suis en train de tracer une relation un à plusieurs entre les employés et Ordres. Les commandes ont alors une relation de plusieurs à plusieurs avec les produits (NorthWind). Voici mes cartographies .. Quelqu'un peut-il me donner un coup de main. Tout fonctionnait avec HBMs

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"); 


    } 
} 

S'il vous plaît laissez-moi savoir si vous avez besoin de plus d'informations. Merci pour l'aide!

-Nick

+0

Avez-vous essayé d'effectuer un vidage et d'examiner les fichiers de mappage générés et le script SQL Create? –

Répondre

2

espaces dans les noms de table est généralement une idée assez mauvaise. Si vous ne pouvez pas les supprimer, essayez d'entourer les noms des tables dans les guillemets, ce qui est le mécanisme d'échappement agnostique de la base de données de NHibernate.

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

Droit ... J'utilise la base de données Norhtwind pour tester. Alors suggérez-vous que le problème est avec le "WithTableName()"? Je vais essayer ça. – Nick

+0

Généralement, lorsque vous utilisez sql simple, vous devez échapper les noms de tables qui contiennent des espaces, donc vous devrez probablement faire la même chose avec NH. –