Отношение Castle ActiveRecord, в котором не используется первичный ключ - PullRequest
0 голосов
/ 07 мая 2011

Я подключаю Castle ActiveRecord к устаревшей базе данных, и у меня возникают проблемы с установлением связи «один ко многим».Проблема в том, что внешний ключ не ссылается на первичный ключ другой таблицы, он использует другой столбец.

Это таблицы (сокращенные для ясности):

CREATE TABLE [Rule](
    [ID] [uniqueidentifier] NOT NULL,
    [HeadingID] [int] NULL
)

CREATE TABLE [Heading](
    [ID] [uniqueidentifier] NOT NULL,
    [ID2] [int] NOT NULL
)

The HeadingIDполе в таблице правил - это внешний ключ, который ссылается на поле ID2 в заголовке.

Итак, в определении класса правила, которое я имею:Я могу без проблем получить доступ к заголовку правила (если я, конечно, установил HasMany ленивым).

В определении класса заголовка у меня есть:

[HasMany(Lazy = true)]
public IList<Rule> Rules { get; set; }

Когда я получаю доступ к коллекцииЯ получаю исключение SQL «Столкновение типов операндов: уникальный идентификатор несовместим с int».Похоже, что AR пытается сделать такой выбор (упрощенный для ясности):

SELECT ... FROM Rule rules0_ ... WHERE rules0_.HeadingID = ?

Где?это GUID из Heading.ID (это должно быть int из Heading.ID2).

Я не могу найти свойство для HasMany, которое позволяет мне задать столбец, к которому относится внешний ключ.Есть ли способ сделать это?

1 Ответ

0 голосов
/ 09 мая 2011

Похоже, что это невозможно сделать.Лучшее, что я мог сделать, - это пользовательская находка:

public virtual IEnumerable<Rule> Rules {
    get {
        return Rule.Queryable.Where(x => x.Heading == this);
    }
}

Для меня этого достаточно.

...