Asp.net 鉴别柱
我在中有一个鉴别器列,需要用于选择插入和更新。我需要更新并选择员工类型。在映射xml文件中有以下代码Asp.net 鉴别柱,asp.net,nhibernate,Asp.net,Nhibernate,我在中有一个鉴别器列,需要用于选择插入和更新。我需要更新并选择员工类型。在映射xml文件中有以下代码 <discriminator column="EmployeeType" type="String"/> <property name="EmployeeType" column="EmployeeType" update="false" insert="false" type="String" /> 请帮助我无法执行您想要执行的操作,因为更改鉴别器值将更改类类
<discriminator column="EmployeeType" type="String"/>
<property name="EmployeeType" column="EmployeeType" update="false" insert="false" type="String" />
请帮助我无法执行您想要执行的操作,因为更改鉴别器值将更改类类型 唯一可能的解决办法是:
public abstract class Animal
{
public virtual Guid id { get; set; }
public virtual string AnimalType { get; set; }
...
}
public class Dog : Animal
{
public virtual bool loves_walkies { get; set; }
}
public class Cat : Animal
{
public virtual bool is_agile { get; set; }
}
使用类似于
<class name="Earth.Animal">
...
<discriminator column="AnimalType" type="String"/>
<property name="AnimalType" type="String" />
<subclass name="Earth.Cat" discriminator-value="Cat">
<property name="loves_walkies" />
</subclass>
<subclass name="Earth.Dog" discriminator-value="Dog">
<property name="is_agile" />
</subclass>
</class>
...
现在,如果NHibernate允许您执行以下操作:
var dog = session.Get<Dog>(guid);
dog.AnimalType = "Cat";
session.SaveOrUpdate(dog);
var-dog=session.Get(guid);
dog.AnimalType=“猫”;
会话。保存或更新(狗);
结果会怎样?NHibernate是否因为对象是狗而保留loves_walkies
属性,但看,鉴别器说它是猫,所以它需要保留is agile
属性
为了避免这种混淆,NHibernate将鉴别器列设置为只读
这个问题以前被问过,请参阅下面的链接以进一步阅读:
你的问题到底是什么?(除了update=“false”会阻止更新,动态更改鉴别器值可能会导致代码中的类型不一致之外)我的问题是EmployeeType列应该用于更新、插入和选择…如果我使用update=“false”insert=“false”然后,对于select语句中的Employeetype,它可以正常工作,但对于update或insert则不行。但是,当我使用update=“true”或insert=“true”…它甚至不适用于select语句…我需要为select/insert/update设置EmployeeType鉴别器列您发布的映射看起来很好。我猜您错过了类和子类映射上的鉴别器值属性。鉴别器值将在插入时自动设置,并且不允许进行更新(这将导致不一致)。