Присоединение к таблице с использованием двух не-FK столбцов с помощью Fluent NHibernate - PullRequest
8 голосов
/ 17 сентября 2010

Я использую Fluent NHibernate и у меня есть две таблицы:

 BusinessPlan [Id, Year, CustomerCode]

 PreviousYearData [Id, Year, CustomerCode, MoreFieldsForData]

В моем домене я хочу присоединить PreviousYearData к BusinessPlan, чтобы сделать объекты примерно такими:

public class BusinessPlan {
    public Guid Id { get; set; }
    public int Year { get; set; }
    public string CustomerCode { get; set; }
    public PreviousYearData PreviousYearData {get; set;}
}

public class PreviousYearData {
    public Guid Id { get; set; }
    public int Year { get; set; }
    public string CustomerCode { get; set; }
    // many more fields
}

Данные в таблице PreviousYearData предварительно заполняются в начале года до создания BusinessPlans, поэтому я не буду знать, каким будет идентификатор BusinessPlan, и не смогу создать нормальный внешний ключ. Я думаю, что я хочу сделать, это присоединить PreviousYearData к BusinessPlan на основе двух столбцов Year и CustomerCode. Это возможно с Fluent NHibernate? Есть ли другой способ приблизиться к этому, который имеет больше смысла?

Ответы [ 2 ]

1 голос
/ 07 октября 2010

Полагаю, это или подобное вам подойдет:

        HasMany(x => x.PreviousYearDatas )
            .Access.AsCamelCaseField(Prefix.Underscore)
            .WithKeyColumns("YEAR", "CUSTOMER_CODE")
            .LazyLoad();

У вас будет коллекция, но вы сможете получить то, что хотите.

Также есть другая конструкция:

        HasMany( 
            // some mapping but includes one foreign key - say customer code
            .Where( "YEAR = 2010" )

Вероятно, это лучший выбор.Я не думаю, что годы часто меняются :)

0 голосов
/ 28 октября 2010

Я не понимаю, почему существует проблема с наличием внешнего ключа в таблице BusinessPlan: PreviousYearDataId

в сопоставлении BusinessPlan просто добавьте:

References(x => x.PreviousYearData )
  .Column("PreviousYearDataId")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...