2

У меня есть одна таблица. Это с. Есть два класса 1. S и 2. PСопоставление подкласса в NHibernate с использованием той же таблицы

Тарелка наследуется из S. Классы:

public class S 
{ 
    public virtual decimal Id { get; set; }   
    public virtual IList<P> ChildPs { get; set; } 
} 

public class P : S 
{ 
    public virtual GType GType { get; set; } 
} 

internal class SMap : ClassMap<S> 
{ 
    public SMap() 
    { 
     Table("s"); 
     Id(x => x.Id).Column("A_S_ID"); 
     /* Set Parent_S_Id */ 
     HasMany<P>(x => x.ChildPs) 
      .KeyColumn("PARENT_A_S_ID") 
      .Cascade.All(); 
    } 
} 

internal class PMap : SubclassMap<P> 
{ 
    public PMap() 
    { 
     References(x => x.GType) 
      .Column("G_TYPE_ID") 
      .ForeignKey("G_TYPE_LU_ID"); 
    } 
} 

Я создал S экземпляр и добавить некоторые P к ChildP. Когда я сохраняю экземпляр S, он дает ошибку P is not exist. Кто-нибудь есть об этом?

Пожалуйста, поделитесь своим взглядом.

+0

Откуда вы знаете, является ли строка в таблице 'structure' типом' Structure' или 'Plate'? Каков дискриминатор между ними? – mickfold

+0

PARENT_ASSET_STRUCTURE_ID - это столбец. Он используется для сохранения Structure_id (родительский идентификатор) для пластин. Для структуры NULL. –

+0

@jugal: Вы хотите решение для подкласса без использования дискриминатора ..... !! – Deepak

ответ

0

Ваши настройки сопоставления наследования - «таблица за подкласс». Это означает, что у вас будут разные таблицы для разных классов. Я не уверен, но мне кажется, что вы не можете сэкономить, потому что у вас только 1 стол. Дополнительная информация here, в разделе Подклассы.

+0

Вы также можете найти хороший пост на этом [здесь] (http://www.codeproject.com/Articles/232034/Inheritance-mapping-strategies-in-Fluent-Nhibernat) – vk5880