2009-05-10 5 views
4

Ich versuche, mehrere Tabellen mit Fluent Nhibernate zu bilden. Meine Tests geben mir die folgende Fehlermeldung: NHibernate.Exceptions.GenericADOException: konnte nicht eine Sammlung initialisieren: [FluentWeb.Domain.Employees.Orders # 1]Fluent NHibernate Mapping Problem

Ich versuche, eine one to many Beziehung zwischen Mitarbeiter zu erfassen und Aufträge. Bestellungen haben dann eine viel zu viele Beziehung mit Produkten (NorthWind). Hier sind meine Mappings .. Kann mir jemand helfen. Alles funktionierte mit 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"); 


    } 
} 

Bitte lassen Sie mich wissen, wenn mehr Informationen benötigt werden. Danke für die Hilfe!

-Nick

+0

Haben Sie versucht, die generierten Mapping-Dateien und das SQL Create-Skript auszuwerten und zu untersuchen? –

Antwort

2

Spaces in Tabellennamen sind in der Regel eine ziemlich schlechte Idee. Wenn Sie sie nicht entfernen können, versuchen Sie, die Tabellennamen in Backticks zu umschließen. Dabei handelt es sich um den agnostischen Escape-Mechanismus von NHibernate.

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

Richtig ... Ich benutze die Norhtwind DB zum Testen. Also schlagen Sie vor, dass das Problem mit dem "WithTableName()" ist? Ich werde es versuchen. – Nick

+0

Normalerweise müssen Sie bei der Verwendung von plain sql Tabellennamen mit Leerzeichen sperren, daher müssen Sie wahrscheinlich dasselbe mit NH machen. –