Преобразование базы данных NHibernate Legacy Невозможно? - PullRequest
0 голосов
/ 15 марта 2010

Я надеюсь, что кто-то может помочь мне с отображением устаревшей базы данных. проблема, которую я описываю здесь, преследует других, но я не смог найти действительно хорошее решение в Интернете.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: это устаревшая БД. Я не могу контролировать композит ключи. Они сосут и не могут быть изменены, сколько бы вы ни говорили мне, что они сосать. Я не могу добавить суррогатные ключи. Пожалуйста, не предлагайте ни один из них, поскольку они не являются вариантами.

У меня есть 2 таблицы, обе с составными ключами. Один из ключей от одного Таблица используется как часть ключа, чтобы получить коллекцию от другого Таблица. Короче говоря, ключи не полностью совпадают между таблицами. ClassB используется везде, где я хотел бы избежать добавления свойств для ради этого отображения, если это возможно.

public class ClassA
{
    //[PK]
    public string SsoUid;

    //[PK]
    public string PolicyNumber;

    public IList<ClassB> Others;

    //more properties....

}

public class ClassB
{
    //[PK]
    public string PolicyNumber;

    //[PK]
    public string PolicyDateTime;

    //more properties
}

Я хочу получить экземпляр ClassA и получить все строки ClassB, которые соответствуют Страховой номер. Я пытаюсь что-то сделать с одним ко многим, но я понимаю, что технически это может быть много ко многим, что я просто как один-ко-многим.

Я пытался использовать ассоциативный класс, но не успел увидеть достаточно если он работает. Я новичок в этих более сложных отображениях и ищу За советом. Я открыт для любых идей.

Спасибо, Кори

Ответы [ 2 ]

1 голос
/ 15 марта 2010

Самый простой способ обработки устаревших схем баз данных - добавить сгенерированный суррогатный первичный ключ (т. Е. Идентификатор в SQL Server) к каждой таблице базы данных и изменить существующие составные первичные ключи на уникальные ограничения. Это позволяет сохранить существующие внешние ключи и упростить сопоставление NHibernate.

Если это невозможно, вы можете использовать property-ref в ваших сопоставлениях для достижения этой цели.

Редактировать: Вы всегда можете вернуться к модели анемичной области. То есть сопоставьте каждый класс, но исключите отношения. У вас будет один метод доступа к данным, чтобы получить ClassA по ключу, и один, чтобы получить коллекцию ClassB по PolicyNumber.

0 голосов
/ 23 марта 2011

В итоге я смог заставить команду БД согласиться добавить несколько суррогатных ключей в таблицы, с которыми я имел дело. Это документ, который я использовал для рассмотрения моего дела .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...