2016-10-24 2 views
0

Я использую NHibernate и FluenNHibernate.NHibernate 4.0 разбивает производные классы

У меня есть 2 класса Deal и SpecialDeal. Таблица "SpecialDeal" не содержит колонки томов. Я действительно храню и использую только 4 свойства, которые показаны в SpecialDealMap. Это было нормально, прежде чем я обновил NHibernate до версии 4.0. Теперь запросы терпят неудачу, потому что они пытаются получить также объем из таблицы «SpecialDeal», хотя Volume отсутствует в SpecialDealMap, и это действительно не в таблице «SpecialDeal».

Как это исправить?

public class Deal 
{ 
    public long Id { get; set; } 
    public DateTime Time { get; set; } 
    public decimal Price { get; set; } 
    public decimal Volume { get; set; } 

    public Deal() {} 
} 

public class SpecialDeal: Deal 
{ 
    public string Code { get; set; } 
} 

public class SpecialDealMap: ClassMap<SpecialDeal> 
{ 
    Id(x => x.Id); 
    Map(x => x.Time); 
    Map(x => x.Price); 
    Map(x => x.Code); 
} 

ответ

0

вам придется реорганизовать свой код. Если Volume не является частью Special Deal, то это действительно не отношения is-a.

Я предлагаю класс макет как

public class Deal 
{ 
    public long Id { get; set; } 
    public DateTime Time { get; set; } 
    public decimal Price { get; set; } 
} 

public class VolumeDeal : Deal 
{ 
    public decimal Volume { get; set; } 
} 

public class SpecialDeal : Deal 
{ 
    public string Code { get; set; } 
} 

Вы также пойти, чтобы определить, хотите ли вы, чтобы сделать иерархию таблицы в-или таблица на подклассу. вы в настоящее время не используете какое-либо сопоставление наследования Nhibernate, потому что ваш подкласс не сопоставляется с использованием SubclassMap. он использует ClassMap.

+0

Я согласен с вами. Но SpecialDeal действительно справляется с некоторыми дополнительными свойствами. Было удобно не добавлять лишние столбцы в таблицу «SpecialDeal», потому что она работала так, как ожидалось. Вы знаете, какие изменения произошли внутри NHibernate? – stray

+0

Я не знаю изменений, которые произошли в NHibernate, но исходное сопоставление не распознается как подкласс, потому что вы наследуете его из SubclassMap в вашем SpecialDealMap. Вы пытались изменить это? – Fran

+0

Я думаю, что вы правы, и я должен реорганизовать этот код. – stray

Смежные вопросы