EF4からnHibernateに変換しましたが、継承にほとんど問題はありません。
私のエンティティとマッピング:
public class User
{
public virtual int Id { get; set; }
public virtual string UserName { get; set; }
}
public class Account
{
public virtual int Id { get; set; }
public virtual User User { get; set; }
}
public class Member : User
{
public virtual string SpecialPropForMember { get; set; }
}
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id);
Map(x => x.UserName);
}
}
public class AccountMap : ClassMap<Account>
{
public AccountMap()
{
Id(x => x.Id);
References(x => x.User);
}
}
public class MemberMap : SubclassMap<Member>
{
public MemberMap()
{
Map(x => x.SpecialPropForMember);
}
}
私の合格したテスト:
[Test]
public void TestMemberUserInheritence()
{
User newUser = new User()
{
UserName = RandomValues.String()
};
Member newMember = new Member()
{
SpecialPropForMember = "special"
};
Account newAccount = new Account()
{
User = newMember
};
Member member = account.User as Member;
Assert.IsNotNull(member);
}
失敗したテスト:
[Test]
public void TestMemberUserInheritenceFromNHibernate()
{
User newUser = new User()
{
UserName = RandomValues.String()
};
UsersService().AddUser(newUser);
Member newMember = new Member()
{
SpecialPropForMember = "special"
};
MemberService().Add(newMember);
Account newAccount = new Account()
{
User = newMember
};
AccountService().Add(newAccount);
Account account; ;
using (var session = DataAccess.OpenSession())
{
account = session.Linq<Account>().First();
}
Member member = account.User as Member;
Assert.IsNotNull(member);
}
NHが継承を適切に解決しない理由を誰かが説明してもらえますか?同じ問題は、クラスごとのテーブルと階層ごとのテーブルにも当てはまります。