Я пытаюсь заставить Fluent NHibernate 1.0 RTM отобразить для меня сущность User, чтобы у меня был доступ к UserId и UserName внутри моего приложения ASP.NET MVC через NHibernate.
У меня есть:
public class User
{
public virtual Guid UserId { get; protected set; }
public virtual string UserName { get; protected set; }
}
Представляет таблицу aspnet_Users, в которой отображаются только соответствующие столбцы. Это единственная сущность, которая не подвергается автоматической проверке. Вот мое отображение:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.UserId);
Map(x => x.UserName);
WithTable("aspnet_Users");
}
}
Все остальное становится автоматическим с условностями.
Вот мои PrimaryKeyConvention и 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));
}
}
Процесс Mapping завершается неудачно сразу после выполнения кода ClassMap (который предшествует всему автоматическому сопоставлению), за которым следует код TableNameConvention, а затем код PrimaryKeyConvention. Ошибка в PrimaryKeyConvention, потому что instance.Property имеет значение null. Я пытался сделать if (instance.Property! = Null), но это
преждевременно завершает процесс сопоставления с ошибкой «обязательный атрибут« класс »отсутствует». У меня также был if (instance.EntityType! = Typeof (User)) в TableNameConvention, но он вынул, когда это не имело никакого значения.
Что здесь происходит? Прежде всего, почему процессы AutoMapping вызывают соглашения для ClassMap? Во-вторых, почему PrimaryKenConvention передается instance.Property == null? Как я могу заставить это работать так, чтобы процесс отображения продолжался и отображал остальные мои объекты, используя соглашения AutoMapping +?
Обратите внимание, у меня все это работало месяцами под более ранней версией FNH до рефакторинга для 1.0 RTM.