Значение дискриминатора базового класса Linq-Sql BUG - PullRequest
3 голосов
/ 25 ноября 2011

В Linq-to-Sql Designer, когда я не определяю «Значение дискриминатора базового класса» для абстрактного базового класса, я получаю «Иерархия наследования с корнем« X »не определяет значение по умолчанию». ошибка во время выполнения, но если я это сделаю, я получу «Абстрактному классу« Имя класса »не должен быть назначен ключ дискриминатора наследования». ошибка. Что с ним не так?

РЕДАКТИРОВАНИЕ:

Я сам нашел причину и решение. Пожалуйста, не отвечайте на мой вопрос.

Даже если вы знаете, что в вашей базе данных нет строк, которые не совпадают ни по одному из определенных кодов наследования, в любом случае вам необходимо установить свойство «Inheritance Default» для Linq-to-Sql. Но вы не можете использовать свой абстрактный базовый класс как «Наследование по умолчанию». Таким образом, вы должны создать фиктивный неабстрактный класс, который ничего не делает (выдает исключение в конструкторе и т. Д.) И использовать его как «Inheritance Default». Оставьте "Значение дискриминатора базового класса" пустым.

1 Ответ

0 голосов
/ 30 октября 2013

Я сделал это, установив дискриминатор по умолчанию равным 0, сделав базовый класс поиска обычным классом и установив класс по умолчанию для таблицы поиска. Это не требует использования дискриминатора. Я предпочитаю этот метод по причине поддержки. Через 2 года кто-то может пойти и удалить фиктивную запись (нарочно или случайно) и потратить навсегда, чтобы выяснить, почему. Это просто делает это проще, но вы получаете удар по архитектуре. Но со всеми ORM вы всегда должны принимать такое решение.

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

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