NHibernate를 통해 ASP.NET MVC 응용 프로그램 내에서 UserId 및 UserName에 액세스 할 수 있도록 Fluent NHibernate 1.0 RTM에서 사용자 엔터티를 매핑하려고합니다.Fluent NHibernate를 사용하여 aspnet_Users 테이블의 부분을 매핑하는 방법
나는이 :
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");
}
}
다른 모든 것들은 관례에 따라 자동 완성되고 있습니다.
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));
}
}
매핑 프로세스를 잘 작성 (모든 자동 매핑 앞에 오는)를 ClassMap 코드를 실행 한 후 실패의 TableNameConvention 코드에 의해 선행 된 PrimaryKeyConvention 코드 뒤에 : 여기
내 PrimaryKeyConvention 및 TableNameConvention 있습니다. instance.Property가 null이기 때문에 실패는 PrimaryKeyConvention에 있습니다. if (instance.Property! = null)을 시도했지만 은 "필요한 속성 'class'is missing"오류와 함께 일찍 매핑 프로세스를 종료합니다. 나는 또한 if (instance.EntityType! = typeof (User))를 TableNameConvention에 넣었지만 아무런 차이가 없을 때 꺼냈다.여기에 무슨 일이 일어나고 있습니까? 우선, 왜 AutoMapping이 ClassMap 규칙을 호출하는 프로세스입니까? 둘째로, PrimaryKenConvention가 instance.Property == null을 전달하는 이유는 무엇입니까? 맵핑 프로세스가 AutoMapping + 규칙을 사용하여 나머지 엔티티를 계속 매핑하도록 맵을 처리하려면 어떻게해야합니까?
참고 : 1.0 RTM에 대한 리팩터 이전의 FNH 이전 버전에서는이 기능이 모두 몇 달 동안 작동했습니다.
안녕하세요 Jamie. 재정의는 자동 매너가 엔티티로 매핑 할 객체에만 적용됩니다. Entity라는 기본 객체를 사용하여 Id, CreatedDate 등을 캡슐화하고 모든 엔티티를 상속합니다. 그러나 내 사용자 개체는 디자인이 aspnet_Users 테이블에 의해 어떻게 지정되는지를 확인하는 엔터티 요구 사항을 따르지 않으므로 아무 것도 상속하지 않습니다. 자동 매핑을 설정할 때 .ignoreBase을 사용합니다. 따라서 사용자가 처음부터 매핑되지 않으므로 권장 방식대로 재정의 할 수 없습니다. –