gpt4 book ai didi

nhibernate - 流利的NHibernate自动映射与鉴别器

转载 作者:行者123 更新时间:2023-12-04 18:16:52 25 4
gpt4 key购买 nike

我正在尝试使用鉴别符映射继承,但是子类没有鉴别符值。如何使用自动映射解决它?

域对象如下:

public abstract class Item : GuidIdentityEntity {
public virtual string Name { get; set; }
}

public class Product : Item {}
public class RawMaterial : Item {}

配置看起来像:
AssemblyOf<Item>()
.IgnoreBase<GuidIdentityEntity>();
.IncludeBase<Item>();
.Setup(setup => {
setup.DiscriminatorColumn = type => "Discriminator";
setup.IsDiscriminated = type => type == typeof(Item);
setup.SubclassStrategy = type => (type == typeof(Item))
? SubclassStrategy.Subclass
: SubclassStrategy.JoinedSubclass;
});

映射的结果是:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-access="property" auto-import="true" default-cascade="none" default-lazy="true">
<class xmlns="urn:nhibernate-mapping-2.2" name="Solution.Core.Products.Item, Solution.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2e5ef41be3839ad7" table="`Item`">
<id name="Id" type="System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="guid.comb" />
</id>
<discriminator type="String">
<column name="Discriminator" />
</discriminator>
<property name="Name" type="System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Name" />
</property>
<subclass name="Solution.Core.Products.RawMaterial, Solution.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2e5ef41be3839ad7" />
<subclass name="Solution.Core.Products.Product, Solution.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=2e5ef41be3839ad7" />
</class>
</hibernate-mapping>

最佳答案

我发现这可行:

    public class SubclassConvention : ISubclassConvention, ISubclassConventionAcceptance
{
#region IConvention<ISubclassInspector,ISubclassInstance> Members

public void Apply(ISubclassInstance instance)
{
if (instance.Name == typeof(SalesInvoice).AssemblyQualifiedName)
instance.DiscriminatorValue("SAL");
}

#endregion

#region IConventionAcceptance<ISubclassInspector> Members

public void Accept(IAcceptanceCriteria<ISubclassInspector> criteria)
{
criteria.Expect(subclass => Type.GetType(subclass.Name).BaseType == typeof(Invoice));
}

#endregion
}

在这种情况下,我有从发票类派生的SalesInvoice类。当当前子类来自发票时,子类的接受标准为true。区分值是根据子类的类型分配的。
如您所见,我使用名称比较类型。不幸的是,由于某些原因,subclass.EntityType属性在运行时为null,因此我无法直接比较类型。

关于nhibernate - 流利的NHibernate自动映射与鉴别器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1708061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com