2010-03-15 3 views
0

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

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

У меня есть 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 PolicyNumber. Я пытаюсь что-то сделать с одним-ко-многим, , но я понимаю, что это технически может быть много-ко многим, что я просто рассматривается как один-ко-многим.

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

Спасибо, Corey

ответ

0

В конечном итоге я смог заставить команду БД согласиться добавить некоторые суррогатные ключи к таблицам, с которыми я имел дело. This is the document I used to plead my case.

1

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

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

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

+0

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

+0

Я видел это «Я открыт практически для любых идей», но пропустил «Я тоже не могу добавить суррогатные ключи». У меня есть еще одна идея, которую я добавлю с помощью редактирования. –

+0

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

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