J'essaye de faire en sorte que Fluent NHibernate 1.0 RTM mette en correspondance une entité User pour que j'aie accès à UserId et UserName dans mon application ASP.NET MVC via NHibernate.Comment mapper une partie de la table aspnet_Users en utilisant Fluent NHibernate
J'ai:
public class User
{
public virtual Guid UserId { get; protected set; }
public virtual string UserName { get; protected set; }
}
Il représente la table aspnet_Users avec uniquement les colonnes pertinentes à cartographiés. C'est la seule entité qui n'est pas automappée. Voici ma correspondance:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.UserId);
Map(x => x.UserName);
WithTable("aspnet_Users");
}
}
Tout le reste est automapped avec des conventions.
Voici mon PrimaryKeyConvention et TableNameConvention:
public class PrimaryKeyConvention : IIdConvention
{
public void Apply(IIdentityInstance instance)
{
instance.Column(instance.Property.ReflectedType.Name + "Id");
instance.UnsavedValue(System.Guid.Empty.ToString());
instance.GeneratedBy.GuidComb();
}
}
public class TableNameConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
instance.Table(Inflector.Net.Inflector.Pluralize(instance.EntityType.Name));
}
}
Le processus de mappage échoue juste après l'exécution du code ClassMap (qui vient avant tout AutoMapping), suivi du code de TableNameConvention, suivi du code de PrimaryKeyConvention. L'échec est dans PrimaryKeyConvention, car instance.Property est null. J'ai essayé de faire un if (instance.Property! = Null) mais que termine le processus de mappage au début avec une erreur "l'attribut required 'class' missing". J'ai aussi eu un if (instance.EntityType! = Typeof (User)) dans le TableNameConvention, mais a sorti quand il ne faisait aucune différence.
Que se passe-t-il ici? Tout d'abord, pourquoi les processus AutoMapping appellent-ils les conventions pour ClassMap? Deuxièmement, pourquoi PrimaryKenConvention obtient-il une instance.Property == null? Comment puis-je faire en sorte que le processus de mappage se déplace et mappe le reste de mes entités en utilisant AutoMapping + conventions?
Remarque, j'ai tout cela fonctionné pendant des mois sous une version antérieure de FNH avant le refactor pour 1.0 RTM.
hi Jamie. Les remplacements sont uniquement pour les objets qui seront mappés en tant qu'entités par l'automapper. J'utilise un objet de base appelé Entity pour encapsuler Id, CreatedDate, etc. et toutes les entités en héritent. Cependant, mon objet User n'hérite d'rien, car il ne respecte pas les exigences de l'entité en voyant comment la conception est dictée par la table aspnet_Users. J'utilise .ignoreBase lors de la configuration de l'AutoMap. Par conséquent, je ne peux pas faire un remplacement comme vous le recommandiez depuis que l'utilisateur n'a jamais été mappé pour commencer. –