J'essaie de créer un système de messagerie entre les utilisateurs et les organisations, c'est-à-dire qu'un utilisateur peut envoyer et recevoir des messages d'utilisateurs ou d'organisations.Génériques avec Fluent et NHibernate
Ainsi, pour soutenir ce système, j'ai commencé avec une interface:
public interface IPassableObject<F, T, O>
where F : DomainObject
where T : DomainObject
{
Guid PassedItemId { get; set; }
O Item { get; set; }
F From { get; set; }
T To { get; set; }
DateTime Created { get; set; }
}
L'idée est plus tard, je voudrais être en mesure de passer plus que des messages - comme des objets sérialisés. Donc, nous avons une classe avec 3 types génériques. À, De, et l'objet
Puis j'ai créé ma classe de message
public class Message<T, F> : DomainObject, IPassableObject<T, F, string>
where F : DomainObject
where T : DomainObject
{
public Message()
{
Created = DateTime.Now;
}
#region IPassableObject<T,F> Members
public virtual Guid PassedItemId { get; set; }
public virtual string Item { get; set; }
public virtual T From { get; set; }
public virtual F To { get; set; }
public virtual DateTime Created { get; set; }
#endregion
}
Puis, je fis ma table pour soutenir mes articles passés:
CREATE TABLE dbo.PassedItems
(
PassedItemId uniqueidentifier NOT NULL,
FromId uniqueidentifier NOT NULL,
ToId uniqueidentifier NOT NULL,
SerializedObject varchar(max) NOT NULL,
Created datetime DEFAULT(GETEDATE()) NOT NULL,
CONSTRAINT PK_PassedItems PRIMARY KEY CLUSTERED (PassedItemId)
)
Années pour mon d'ID les utilisateurs et les organisations sont des guids. Maintenant, j'ai ma cartographie fluide pour les messages Utilisateur - Utilisateur. Ma pensée est que je n'aurai qu'à créer 4 mappings et ne pas maintenir 4 classes séparées pour user-user, user-org, org-user, et org-org. J'espérais que Nhibernate prendrait le guid dans la table et essayerait automatiquement d'insérer l'objet en fonction du type spécifié.
public class UserToUserMessageMap : ClassMap<Message<UserProfile, UserProfile>>
{
public UserToUserMessageMap()
{
WithTable("PassedItems");
Id(x => x.PassedItemId, "PassedItemId").GeneratedBy.Guid();
Map(x => x.Item, "SerializedObject");
Map(x => x.Created);
References(x => x.From, "FromId");
References(x => x.To, "ToId");
}
}
La question que je vois est que quand je lance mon application, je reçois une erreur d'exécution:
NHibernate.MappingException: An association from the table PassedItems does not specify the referenced entity
Ainsi, cette approche va encore travailler? Qu'est-ce que je fais mal? Merci!
J'ai essayé de changer les références en spécifiant un type. Malheureusement, cela n'a pas fonctionné non plus: Références (x => x.From, "FromId"); –
Josh
FYI - nous utilisons FluentNHibernate version 0.1.0.363 et NHibernate version 2.0.1.4000 – Josh