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?
Quelle version de .Net utilisez-vous? – Richard