Я делаю упрощенную игру тривиального преследования . Я не уверен, смогу ли (и затем как) сделать следующее с EF4: -
У меня есть структура таблицы следующим образом.
Таблица: TrivialPursuitQuestion
=> ID
=> Unique Question
=> AnswerId
=> AnswerType (ie. Geography, Entertainment, etc).
Таблица: ГеографияОтвет
=> ID
=> Place Name
=> LatLong
Таблица: РазвлеченияОтвет:
=> ID
=> Name
=> BordOn
=> DiedOn
=> Nationality .. and other meta data
... и т. Д.
Таким образом, когда человек задает уникальный вопрос ... сохраненный процесс может выяснить, какой это тип ответа (т. Е. Поле AnswerType) ... и, следовательно, выполнить запрос к правильной таблице.
EG.
SELECT @AnswerId = AnswerId, @AnswerType = AnswerType
FROM TrivialPursuitQuestions
WHERE UniqueQuestion = @Question
IF @AnswerId > 0 AND @AnswerType > 0 BEGIN
IF @AnswerType = 1
SELECT *
FROM GeographicAnswers
WHERE AnswerId = @AnswerID
IF @AnswerType = 2
SELECT *
FROM EntertainmentAnswer
WHERE AnswerId = @AnswerId
... etc ...
END
Теперь .. я не уверен, как это сделать с EF. Прежде всего, сохраненный процесс теперь может возвращать НЕСКОЛЬКО типов результатов .. поэтому я не уверен, действительно ли это плохо.
Тогда я подумал, что, возможно, хранимая процедура должна возвращать множественные наборы записей ... со всеми, кроме одного набора записей, содержащего результат (ы) ... потому что по конструкции будет найден только один тип ответа ...
EG.
-- Same SELECT as above...
IF @AnswerId > 0 BEGIN
SELECT *
FROM GeographicAnswers
WHERE AnswerId = CASE @AnswerId WHEN 1 THEN @AnswerID ELSE 0 END
SELECT *
FROM EntertainmentAnswer
WHERE AnswerId = CASE @AnswerId WHEN 2 THEN @AnswerID ELSE 0 END
... etc ...
END
и это вернет 6 (несколько) наборов записей ... но только один из них должен когда-либо иметь некоторые данные.
Теперь, если это лучшее решение ... возможно ли это с EF4 и как?
Я стараюсь избегать ДВУХ поездок туда и обратно, а также мне нужно выяснить ЧТО пытаться получить ... Я не хочу выяснять это ... Я надеюсь, что с некоторыми умными моделирование системы достаточно умно, чтобы сказать: «О! и это правильный ответ ». Вроде как фабрика ответов (аля Factory Pattern), но с Sql Server + EF4.
У кого-нибудь есть идеи?