2 つのアプリケーションがあります。
API
Web フォーム アプリ
API で Entity Framework 5 を使用しています。
Web フォーム アプリは API 呼び出しを行い、データを取得します。
何らかの理由で、データを取得すると、まったく同じ行がいくつか表示されます。
ここでの問題は、SQL Server Profiler を使用してクエリを確認すると、クエリが正しく、このクエリを SQL で実行すると結果が正しいことです。ただし、Web フォーム アプリでは、多くのデータが同じように返されます。
これらの 2 つのスクリーンショットを見てください -
アプリケーションの実行:
エンティティ フレームワークによって生成された SQL クエリを取得し、SQL に実行します。
ご覧のとおり、これは私を非常に混乱させています...
ここで何が問題なのか誰にもわかりませんか?
これが私のEFモデルです:
Entity Framework によって生成されたクエリ:
{SELECT
[Extent1].[dataSource] AS [dataSource],
[Extent1].[ShowId] AS [ShowId],
[Extent1].[Title] AS [Title],
[Extent1].[EpisodeId] AS [EpisodeId],
[Extent1].[EpisodeTitle] AS [EpisodeTitle],
[Extent1].[Genre] AS [Genre],
[Extent1].[ShowTypeDescription] AS [ShowTypeDescription],
[Extent1].[DirectorName] AS [DirectorName],
[Extent1].[ReleaseYear] AS [ReleaseYear],
[Extent1].[SeasonEpisode] AS [SeasonEpisode]
FROM (SELECT
[TVData_VW_ShowList].[dataSource] AS [dataSource],
[TVData_VW_ShowList].[ShowId] AS [ShowId],
[TVData_VW_ShowList].[Title] AS [Title],
[TVData_VW_ShowList].[EpisodeId] AS [EpisodeId],
[TVData_VW_ShowList].[EpisodeTitle] AS [EpisodeTitle],
[TVData_VW_ShowList].[Genre] AS [Genre],
[TVData_VW_ShowList].[ShowTypeDescription] AS [ShowTypeDescription],
[TVData_VW_ShowList].[DirectorName] AS [DirectorName],
[TVData_VW_ShowList].[ReleaseYear] AS [ReleaseYear],
[TVData_VW_ShowList].[SeasonEpisode] AS [SeasonEpisode]
FROM [dbo].[TVData_VW_ShowList] AS [TVData_VW_ShowList]) AS [Extent1]
WHERE [Extent1].[Title] LIKE @p__linq__0 ESCAPE '~'}
デバッグモードに入ってこのクエリを取得しました。実際のデータベースで実行すると、正しい結果が返されます。
コントローラーコード:
public class ShowsController : ApiController { プライベート readonly TVDataEntities db;
public ShowsController()
{
db = new TVDataEntities();
db.Configuration.ProxyCreationEnabled = false;
}
public IEnumerable<TVData_VW_ShowList> GetTVData_VW_ShowList(string dataSource = null, string title = null,
string episodeTitle = null, string genre = null,
string showTypeDescription = null,
string directorName = null,
string releaseYear = null,
string seasonEpisode = null)
{
var query = from s in db.TVData_VW_ShowList select s;
if (dataSource != null)
{
if (dataSource != "all")
{
query = query.Where(s => s.dataSource.Contains(dataSource));
}
}
if (title != null)
{
query = query.Where(s => s.Title.Contains(title));
}
if (episodeTitle != null)
{
query = query.Where(s => s.EpisodeTitle.Contains(episodeTitle));
}
if (genre != null)
{
query = query.Where(s => s.Genre.Contains(genre));
}
if (showTypeDescription != null)
{
query = query.Where(s => s.ShowTypeDescription.Contains(showTypeDescription));
}
if (directorName != null)
{
query = query.Where(s => s.DirectorName.Contains(directorName));
}
if (releaseYear != null)
{
query = query.Where(s => s.ReleaseYear.ToString().Contains(releaseYear));
}
if (seasonEpisode != null)
{
query = query.Where(s => s.SeasonEpisode.Contains(seasonEpisode));
}
return query.ToList();
}
}