Свободные проблемы с сохранением коллекции NHibernate Child

У меня есть следующие классы отображения (скопирована только соответствующая часть):

public class CardTemplateMapping : ClassMap<CardTemplate>
{
    public CardTemplateMapping()
    {
        Table("cardtemplate");

        Id(x => x.Id)
            .Column("id")
            .GeneratedBy.Native();

        HasMany(x => x.CostStructures)
            .KeyColumn("cardtemplate_id")
            .Cascade.All();

    }
}
public class CostStructureMapping : ClassMap<CostStructure>
{
    public CostStructureMapping()
    {
        Table("coststructure");

        Id(x => x.Id)
            .Column("id")
            .GeneratedBy.Native();

        References(x => x.CardTemplate)
            .Column("cardtemplate_id");

        HasMany(x => x.CostComponents)
            .KeyColumn("coststructure_id")
            .Cascade.AllDeleteOrphan();

    }
}
public class CostStructureComponentMapping : ClassMap<CostStructureComponent>
{
    public CostStructureComponentMapping()
    {
        Table("CostStructureComponent");

        Id(x => x.Id)
            .Column("id")
            .GeneratedBy.Native();

        References(x => x.CostStructure)
            .Column("coststructure_id");

        References(x => x.ResourceType)
            .Column("resourcetype_id");
    }
}

Nhibernate загружает отношения, как я и предполагал. Но две части картографии кажутся немного странными (или это, или мои ожидания странные).

Первый:

 CostStructure structure = new CostStructure() { CardTemplate = template };
 template.CostStructures.Add(structure);
 Session.Save(template);
 Session.Flush();

Это не сохраняет новыйCostStructure экземпляр. Почему?

Второй: если я загрузилCardTemplate иметьCostStructure содержащий триCostStructureComponent юридические лица. Теперь я хочу удалить один из техCostStructureComponents изCostStructure.
Я попробовал следующее:

costStructure.CostComponents.Remove(component);
component.CostStructure = null;
session.Save(template)

Теперь я знаю, что явное удаление явно работает, но не должноDeleteOrphan часть также утверждают, что компонент, теперь безCostStructure ссылка, удаляется? Вместо этого NHibernate пытается выполнить следующее обновление:

UPDATE CostStructureComponent 
SET amount = @p0, 
     coststructure_id = @p1, 
     resourcetype_id = @p2
WHERE id = @p3;

@p0 = 1 [Type: Int32 (0)], 
@p1 = NULL [Type: Int64 (0)], 
@p2 = 5 [Type: Int64 (0)], 
@p3 = 13 [Type: Int64 (0)]

Может быть, Equals / GetHashCode были реализованы неправильно?

Извините, уже поздно, был долгий день и так далее ... Если я говорю тарабарщину, пожалуйста, дайте мне знать ...

Ответы на вопрос(1)

Ваш ответ на вопрос