【发布时间】:2010-08-28 00:58:52
【问题描述】:
我正在制作一个简单的trivial pursuit game。我不确定是否(以及如何)我可以使用 EF4 执行以下操作:-
我的表结构如下。
表格:TrivialPursuitQuestion
=> ID
=> Unique Question
=> AnswerId
=> AnswerType (ie. Geography, Entertainment, etc).
表:GeographyAnswer
=> 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 以及如何实现?
我试图避免两次往返数据库,还必须弄清楚要尝试检索的内容......我不想弄清楚......我希望有一些聪明的人对系统进行建模很聪明,可以说“哦!你这是正确的答案'。有点像答案工厂(ala 工厂模式),但使用 Sql Server + EF4。
有人有什么想法吗?
【问题讨论】:
标签: sql-server entity-framework architecture entity-framework-4