Я изменяю отображение NHibernate.AspNetCore.Identity до NHibernate.Mapping.ByCode
, как описано в выпуске https://github.com/nhibernate/NHibernate.AspNetCore.Identity/issues/16.
Я переписал orignal xml отображение NHibernate.AspNetCore.Identity
с ClassMapping<T>
, код выглядит следующим образом:
public class IdentityRoleMappingPostgreSql : ClassMapping<IdentityRole> {
public IdentityRoleMappingPostgreSql() {
Schema("public");
Table("aspnet_roles");
Id(e => e.Id, id => {
id.Column("id");
id.Type(NHibernateUtil.String);
id.Length(32);
id.Generator(Generators.TriggerIdentity);
});
Property(e => e.Name, prop => {
prop.Column("name");
prop.Type(NHibernateUtil.String);
prop.Length(64);
prop.NotNullable(true);
prop.Unique(true);
});
/* other property mappings ignored here .*/
}
}
Полный код отображения здесь:
https://github.com/nhibernate/NHibernate.AspNetCore.Identity/tree/master/src/NHibernate.AspNetCore.Identity/Entities
Затем я пытаюсь расширить эти сопоставления с помощью joined-sublcass
из xml сопоставлений, например:
<?xml version="1.0" encoding="UTF-8" ?>
<hibernate-mapping
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="urn:nhibernate-mapping-2.2"
namespace="WebTest.Entities" assembly="WebTest">
<joined-subclass name="AppRole" schema="public" table="app_roles" extends="NHibernate.AspNetCore.Identity.IdentityRole, NHibernate.AspNetCore.Identity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
<key column="id" />
<property name="Description" column="description" type="string" length="256" />
</joined-subclass>
</hibernate-mapping>
При установке nhibernate я получил следующее исключение:
NHibernate.MappingException : These classes referenced by 'extends' were not found:
FullName:NHibernate.AspNetCore.Identity.IdentityRole - Name:NHibernate.AspNetCore.Identity.IdentityRole, NHibernate.AspNetCore.Identity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
FullName:NHibernate.AspNetCore.Identity.IdentityUser - Name:NHibernate.AspNetCore.Identity.IdentityUser, NHibernate.AspNetCore.Identity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
at NHibernate.Cfg.MappingsQueue.CheckNoUnavailableEntries()
at NHibernate.Cfg.Configuration.SecondPassCompile()
at NHibernate.Cfg.Configuration.BuildMappings()
at UnitTest.IdentityTest._02_CanSetupMappingByXml()
Затем я переписываю отображение xml с помощью JoinedSubclassMapping<AppRole>
, который работает, может построить фабрику сеанса и выполнить запрос без каких-либо исключений.
public class AppRoleMapping : JoinedSubclassMapping<AppRole> {
public AppRoleMapping() {
ExplicitDeclarationsHolder
.AddAsRootEntity(typeof(NHIdentityRole));
Extends(typeof(NHIdentityRole));
Schema("public");
Table("app_roles");
Key(k => k.Column("id"));
Property(
p => p.Description,
maping => {
maping.Column("description");
maping.Type(NHibernateUtil.String);
maping.Length(256);
}
);
}
}
Итак, проблема в следующем:
- при использовании
JoinedSubclassMapping<T>
для расширения сборки сопоставлений с помощью ClassMapping<T>
, он работает _01_CanExtendByCodeWithByCode ; - при использовании сопоставления
joined-subclass
из xml для расширения сборки сопоставлений с ClassMapping<T>
, получите исключение NHibernate.MappingException : These classes referenced by 'extends' were not found
_02_CanExtendByCodeWith Xml; - при использовании
joined-subclass
xml mappin g для расширения class
xml отображения, он работает _03_CanExtendXmlBy Xml; - при использовании
JoinedSubclassMapping<AppRole>
для расширения class
отображения xml, работает _04_CanExtendXmlByByCode ;
Полный тестовый код приведен здесь: https://github.com/nhibernate/NHibernate.AspNetCore.Identity/blob/master/test/UnitTest/IdentityTest.cs
Возможно, что-то я не так делаю, или есть проблемы с отображениями nhibernate