Fluent NHibernate 1.0 RTMでユーザーエンティティをマップして、NHibernateを介してASP.NETMVCアプリケーション内のUserIdとUserNameにアクセスできるようにしようとしています。
私は持っています:
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));
}
}
マッピングプロセスは、ClassMapコード(すべての自動マッピングの前にあります)、TableNameConventionコード、PrimaryKeyConventionコードの直後に失敗します。instance.Propertyがnullであるため、失敗はPrimaryKeyConventionにあります。if(instance.Property!= null)を実行しようとしましたが、「必要な属性'クラス'がありません」というエラーでマッピングプロセスが早期に終了します。TableNameConventionにif(instance.EntityType!= typeof(User))もありましたが、違いがないときに削除しました。
ここで何が起こっているのですか?まず、AutoMappingプロセスがClassMapの規則を呼び出すのはなぜですか?次に、PrimaryKenConventionがinstance.Property == nullを渡されるのはなぜですか?これを機能させて、マッピングプロセスを進め、AutoMapping +規則を使用して残りのエンティティをマッピングするにはどうすればよいですか?
1.0 RTMのリファクタリングの前に、以前のバージョンのFNHでこれをすべて数か月間機能させていたことに注意してください。