Преобразование старых отношений Linq-to-SQL - PullRequest
0 голосов
/ 08 декабря 2009

Я пытаюсь заставить Linq2SQL работать с моей прежней базой данных. В настоящее время у меня есть таблица заметок, которая является общей для нескольких различных сущностей и сопоставлена ​​с m: m. Вместо того чтобы отображать одну таблицу отношений для каждого типа сущности, кто бы ни проектировал эту базу данных, он решил использовать одну таблицу отношений со столбцом типа (как гадость!)

альтернативный текст http://img130.imageshack.us/img130/326/capturefm.png

Как мне сопоставить Foo и Bar, чтобы иметь коллекцию Notes? Это вообще возможно? Я не вижу света. Я пытался иметь два класса FooNotes и BarNotes, которые наследуются от RelateNotes, а затем отображал поле Type в качестве дескриптора.

альтернативный текст http://img130.imageshack.us/img130/3153/capture2f.png

Это не работает, и я получаю сообщение об ошибке ниже.

Bad Storage property: '_EntityID' on member 'TestLinq.BarNotes.EntityID'.

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

Большое спасибо,

1 Ответ

0 голосов
/ 12 декабря 2009

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

Таким образом, вы можете создать модель предметной области, которая отвечает требованиям системы, абстрагируясь от того, как работает сопоставление. Например, у вас может быть общий интерфейс для уровня доступа к данным, который возвращает сопоставленные объекты. Реализация этого интерфейса может быть создана для старых отношений m2m "равенство строк" в устаревшей базе данных. Однажды, когда вы будете готовы отказаться от унаследованной базы данных, можно создать новую реализацию для другой модели ER db, которая позволит вашей доменной модели (объектная модель) и более высоким уровням (сервисам, пользовательскому интерфейсу и т. Д.) Остаться неизменными (поскольку все использовать общий интерфейс).

В вашей объектной модели вы можете определить каждый объект, который нуждается в Notes, и каждый из них должен содержать коллекцию Notes для каждого экземпляра. Например. У Foo есть коллекция Notes; Бар имеет коллекцию заметок. Ваш интерфейс репозитория будет выглядеть после возврата этих сущностей, но реализация этого репозитория будет беспокоиться о том, как он читается и сохраняется в БД.

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