Je face à cas suivant: Je table par hiérarchie de classe:Deux collection de la table par hiérarchie de classe dans une classe dans le NHibernate/Conform
public abstract class Parent : BaseEntity, IHierarchyEntity
{
}
public class ChildA : Parent
{
public virtual string Name { get; set; }
}
public class ChildB : Parent
{
public virtual string Value { get; set; }
}
public class Container : BaseEntity
{
public Container()
{
CollectionOne = new HashSet<ChildA>();
CollectionTwo = new HashSet<ChildB>();
}
public virtual ICollection<ChildA> CollectionOne { get; set; }
public virtual ICollection<ChildB> CollectionTwo { get; set; }
}
petit morceau de logique mappeur Domaine (il s` s presque le même):
IEnumerable<Type> allPersistEntities = GetDomainEntities();
IEnumerable<Type> roots = allPersistEntities.Where(t => t.IsAbstract && t.InheritedFromBaseEntity());
IEnumerable<Type> hierarchyEntities = allPersistEntities.Where(t => typeof(IHierarchyEntity).IsAssignableFrom(t));
var hierarchyRoots = hierarchyEntities.Where(t => t.IsAbstract && t.InheritedFromBaseEntity());
orm.TablePerClassHierarchy(hierarchyRoots);
quand je sauvé des articles tout est ok, mais quand j'ai essayé de ceux que je reçois deux d'entre eux dans le type CollectionOne (Childa) et erreur dans le second:
illegal access to loading collection What I see in the sql:
NHibernate:
SELECT
container0_.Id as Id0_0_
FROM
CONTAINERS container0_
WHERE
[email protected];
@p0 = 1 [Type: Int32 (0)] NHibernate:
SELECT
collection0_.ContainerId as Containe5_1_,
collection0_.Id as Id1_,
collection0_.Id as Id1_0_,
collection0_.Name as Name1_0_
FROM
PARENTS collection0_
WHERE
[email protected];
@p0 = 1 [Type: Int32 (0)] NHibernate:
SELECT
collection0_.ContainerId as Containe5_1_,
collection0_.Id as Id1_,
collection0_.Id as Id1_0_,
collection0_.[Value] as Value3_1_0_
FROM
PARENTS collection0_
WHERE
[email protected];
@p0 = 1 [Type: Int32 (0)]
Il n'y a pas de champ de discriminateur. Est-il possible de le réparer?
Après cela se passe une erreur: Impossible de déterminer le type pour: Dlls.ChildA, DLLs, pour les colonnes: NHibernate.Mapping.Column (CollectionOneElement) On dirait Nhibernate 't préciser de quel type il est. –
Je pense que soit il n'a pas compris le mappage de la relation FK, soit il n'a pas cartographié les classes. Est-ce lors de la sauvegarde ou de la lecture? Conform est capable de produire une copie xml du mapping qu'il crée. Essayez de produire cela et de comparer à ce qu'il devrait être - devrait vous donner une idée de ce que vous devez corriger. –