頭痛の種になる単純な Fluent-NHibernate マッピングがあります。エンティティの 1 つのディクショナリをマップしようとしていますが、その FK は null のままです。
エンティティのコードは次のとおりです。
public class Person
{
public Person()
{
PhoneNumbers = new Dictionary<string, Phone>();
}
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual IDictionary<string, Phone> PhoneNumbers { get; set; }
}
public class Phone
{
public virtual int Id { get; set; }
public virtual string Type { get; set; }
public virtual string Number { get; set; }
}
さて、マッピングは次のとおりです。
public class PersonClassMap : ClassMap<Person>
{
public PersonClassMap()
{
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name);
HasMany(x => x.PhoneNumbers).AsMap(y => y.Type).Cascade.All();
}
}
public class PhoneClassMap : ClassMap<Phone>
{
public PhoneClassMap()
{
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Type);
Map(x => x.Number);
}
}
最後に、私が行っているテストは次のとおりです。
static void Main(string[] args)
{
ConfigureSessionFactory();
using (var session = _sessionFactory.OpenSession())
{
var john = new Person();
john.Name = "John";
Phone home = new Phone
{
Type = "Home",
Number = "12345"
};
john.PhoneNumbers.Add(home.Type, home);
session.Save(john);
}
}
なんらかの理由で、データベースを調べると、電話番号のレコードPerson_id
は null のままであり、DB から人物をロードすると、PhoneNumbers
辞書は空のままです。
なんで?そして、この問題を解決するにはどうすればよいですか?私は何を間違ってマッピングしていますか?