【问题标题】:fluent nhibernate one-to-one with base class流利的 nhibernate 与基类一对一
【发布时间】:2011-03-22 08:45:55
【问题描述】:

假设我有课:

class Person
{
 String FirstName;
 String LastName;
 Pet Pet;
}

class Pet
{
 String Name;
 Person Owner;
}

class Cat : Pet
{
 Int32 MousesCaught;
}

class Dog : Pet
{
 Int32 CatsCaught;
}

还有一个映射:

public class PetMap : IAutoMappingOverride<Pet>
{
    public void Override(AutoMapping<Pet> mapping)
    {
        mapping.HasOne(x => x.Owner).PropertyRef(x => x.Pet).Constrained().Cascade.All();
        mapping.JoinedSubClass<Cat>("PetId");
        mapping.JoinedSubClass<Dog>("PetId");
    }
}

问题是:如果数据库中有带猫或狗的人,则 Person.Pet 的类型为“Pet{PetBroxyBlaBlaBla}”。所以我不能将 Person.Pet 转换为 Cat (Person.Pet as Cat == null)。

    var person = this.Session.Get<Person>(personId);
    // person.Pet as Cat == null

但是如果我在得到 Person 之前从 DB 得到这个宠物,那么类型是有效的:

    var a = new this.Session.Get<Pet>(petId);
    var person = this.Session.Get<Person>(personId);
    // person.Pet as Cat != null

有没有办法告诉 NHibernate 用一个有效的类型来初始化这个属性?

【问题讨论】:

    标签: nhibernate fluent-nhibernate automapping one-to-one


    【解决方案1】:

    尝试禁用延迟加载。可能是this引起的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 2010-10-09
      相关资源
      最近更新 更多