Fluent nHibernate - 将多态 属性 映射到 table 中的单个列
Fluent nHibernate - Mapping a polymorphic property to a single column in the table
我有类似下面的 类 的内容,我想将 Foo
映射到具有两列的单个 table,Id
和 State
具有 1, "BigState"
和 2, "LittleState"
之类的值,但我真的很难为此找到地图示例。
public class Foo
{
public int Id { get; set; }
public State State { get; set; }
}
public abstract class State
{
}
public class BigState : State
{
}
public class LittleState : State
{
}
https://nhibernate.info/doc/nhibernate-reference/inheritance.html
您对 table 每个 class 层次结构策略感兴趣。您的第二列将是鉴别器列。当您使用 FluentNhibernate 时,您可以从 DefaultAutomappingConfiguration 派生并覆盖方法 AbstractClassIsLayerSupertype
、IsDiscriminated
、GetDiscriminatorColumn
。您还需要实施 IClassConvention
和 ISubclassConvention
以提供 class 名称作为鉴别器值,类似的东西。
public class SubclassConvention : ISubclassConvention
{
public void Apply(ISubclassInstance instance)
{
instance.DiscriminatorValue(instance.EntityType.Name);
}
}
我有类似下面的 类 的内容,我想将 Foo
映射到具有两列的单个 table,Id
和 State
具有 1, "BigState"
和 2, "LittleState"
之类的值,但我真的很难为此找到地图示例。
public class Foo
{
public int Id { get; set; }
public State State { get; set; }
}
public abstract class State
{
}
public class BigState : State
{
}
public class LittleState : State
{
}
https://nhibernate.info/doc/nhibernate-reference/inheritance.html
您对 table 每个 class 层次结构策略感兴趣。您的第二列将是鉴别器列。当您使用 FluentNhibernate 时,您可以从 DefaultAutomappingConfiguration 派生并覆盖方法 AbstractClassIsLayerSupertype
、IsDiscriminated
、GetDiscriminatorColumn
。您还需要实施 IClassConvention
和 ISubclassConvention
以提供 class 名称作为鉴别器值,类似的东西。
public class SubclassConvention : ISubclassConvention
{
public void Apply(ISubclassInstance instance)
{
instance.DiscriminatorValue(instance.EntityType.Name);
}
}