2011-01-13 5 views
2

J'ai deux types d'entités, de commentaires et de tâches. Les deux types peuvent être mis en signet par un utilisateur. J'ai donc créé un tableau intitulé « Favoris »:Fluent NHibernate - HasManyToMany avec plusieurs ChildKeyColumns possibles?

CREATE TABLE [dbo].[Bookmarks] (
[ID] [int] IDENTITY(1,1) NOT NULL, 
[FKUserID] [int] NOT NULL, 
[FKCommentID] [int] NULL, 
[FKTaskID] [int] NULL) 

La cartographie de ces relations pour mon entité utilisateur ressemble à ceci:

var bookmarks = Component(x => x.Bookmarks, x => x.HasManyToMany(b => b.Comments) 
.Table("Bookmarks") 
.Access.CamelCaseField() 
.ParentKeyColumn("FKUserID") 
.ChildKeyColumn("FKCommentID") 
.AsBag() 
.LazyLoad()); 

bookmarks.HasManyToMany(b => b.Tasks) 
    .Table("Bookmarks") 
    .Access.CamelCaseField() 
    .ParentKeyColumn("FKUserID") 
    .ChildKeyColumn("FKTaskID") 
    .AsBag() 
    .LazyLoad(); 

Tout cela fonctionnerait bien que je pense, mais pas quand la Les objets de base de données sont créés par scratch à partir de NHibernate lui-même. Puis-je obtenir le joli message d'erreur

NHibernate.Exceptions.GenericADOException: n'a pas pu insérer collection: [Domain.Model.User.Domain.Model.User.Bookmarks.Tasks # 1] [SQL: INSERT INTO Favoris (FKUserID, FKTaskID) VALEURS (@ p0, @ p1)] ----> System.Data.SqlClient.SqlException: Impossible d'insérer la valeur NULL dans la colonne 'FKCommentID', table 'xyzautomatedtests.dbo.Bookmarks'; La colonne n'autorise pas les valeurs NULL. INSERT échoue. La déclaration a été terminée.

Bien sûr, j'aurais pu utiliser deux tables à la place de celle-ci, mais n'y a-t-il pas moyen de la faire fonctionner? Malheureusement, je ne peux pas trouver un moyen de définir ces deux colonnes enfants dans la configuration pour être nullable.

Des indices?

+0

Quelle version de .Net utilisez-vous? – Richard

Répondre

2

Vérifiez à nouveau la définition de votre table. Le SQLException vient directement de la base de données, donc les problèmes que vous avez proviennent de la base de données, pas de .Net. Assurez-vous simplement que la colonne FKCommentID de votre table Bookmarks est effectivement Nullable.

Questions connexes