NHibernate Error – «Impossible d’initialiser une collection»

Les mappages plusieurs-à-un fonctionnent correctement, mais une relation un-à-plusieurs entre sites et emplacement_times continue de me donner une erreur.

Je continue à avoir cette erreur: entrez la description de l'image ici

sur cette ligne de code: entrez la description de l'image ici

Les mappages ressemblent à ceci:

Emplacement:

public virtual IList LocationTimes { get; set; } public virtual int locationID { get; set; } public virtual IList LocationTimes { get; set; } public Location() { LocationTimes = new List(); } 

Une carte:

  public class LocationMap : ClassMap { public LocationMap() { Table("Locations"); Id(x => x.locationID).Column("ID"); HasMany(x => x.LocationTimes) .Inverse() .Cascade.All(); 

Table de localisation:

 CREATE TABLE [dbo].[Locations]( [ID] [int] IDENTITY(1,1) NOT NULL ... CONSTRAINT [PK_Locations_1] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 

LocationTimes:

 public class LocationTimes { public virtual int ID { get; set; } public virtual Location Location { get; set; } } 

Carte de localisation:

 public class LocationTimesMap : ClassMap { public LocationTimesMap() { Table("Location_Times"); Id(x => x.ID); References(x => x.Location).Column("LID"); } } 

Table Location_times:

 CREATE TABLE [dbo].[Location_Times]( [ID] [int] IDENTITY(1,1) NOT NULL, [LID] [int] NULL, [EHStart] [int] NULL, [EHEnd] [int] NULL, [EHSell] [money] NULL, CONSTRAINT [PK_Location_Times_1] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] 

Le message d’erreur complet:

“{” n’a pas pu initialiser une collection: [WhygoDomain.Location.LocationTimes # 4] [SQL: SELECT locationti0_.Location_id as Location4_1_, locationti0_.ID comme ID1_, locationti0_.ID comme ID1_0_, locationti0_.LID comme LID1_0_.idid EHStart1_0_ FROM Location_Times locationti0_ WHERE locationti0_.Location_id =?] “}”

Le message d’erreur indique dans sql qu’il est effectivement à la recherche de locationti0_.Location_id, qui, je le sais, n’existe pas. Je ne sais pas pourquoi il cherche ça.

Il s’agit généralement d’un problème de correspondance erronée des noms d’ID sur vos tables. Vérifiez que l’emplacement contient une colonne d’identifiant sur la table et qu’elle respecte votre convention ou qu’elle est correctement mappée. Vous ne partagez pas la carte, le graphe d’objects complet ou les tables de Location, il est donc difficile de savoir comment les ID sont nommés et s’ils correspondent correctement.

Modifier:

Selon la réponse de RichardD dans les commentaires, modifiez la LocationMap comme suit:

 public class LocationMap : ClassMap { public LocationMap() { Table("Locations"); Id(x => x.locationID).Column("ID"); HasMany(x => x.LocationTimes).KeyColumn("LID").Inverse().Cascade.All();