首页 > 解决方案 > SQL 中的 C# Web API 数据模型返回重复的行

问题描述

我有一个与 SQL 数据库后端交互的 Web API 2.0 应用程序。它连接到没有主键的视图,因此 Visual Studio 不会在 edmx 文件中创建实体。所以我调整了视图以动态创建一个主视图。这是视图:

SELECT DISTINCT ISNULL(tr.id, - 999) AS MyPrimaryID, CASE WHEN [Date] IS NOT NULL THEN [Date] ELSE tr.shipmentDate END AS Date, dt.message AS Status, dt.Location, 'THIS' + RIGHT(tr.trackingNum, LEN(tr.trackingNum) - 3)AS Tracking FROM dbo.tblTrackingDetail AS dt LEFT OUTER JOIN
                     dbo.tblTracking AS tr ON dt.idLink = tr.id

该视图在 SQL 中运行良好。我的主要搜索条件是 trackingNum 列。

SELECT *  FROM [dbo].[vTracking] where tracking = 'THIS123456'

该查询返回以下内容:

在此处输入图像描述

创建我的 ADO.NET 实体数据模型后,我的 edmx 文件下有文件 vTracking.cs。以下是内容:

namespace MyServices.Models{
using System;
using System.Collections.Generic;

public partial class vTracking
{
    public int MyPrimaryID { get; set; }
    public Nullable<System.DateTime> Date { get; set; }
    public string Status { get; set; }
    public string Location { get; set; }
    public string Tracking { get; set; }
}

}

在我的 Controllers 文件夹下,我有 TrackingController.cs 包含以下内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using MyServices.Models;

namespace MyServices.Controllers
{
public class TrackingController : ApiController
{
    public IEnumerable<vTracking> Get()
    {
        using (MyEntities dbContext = new MyEntities())
        {
            return dbContext.vTrackings.ToList();
        }
    }
    //public vTracking Get(string id)
    public IEnumerable<vTracking> Get(string id)
    {
        using (MyEntities dbContext = new MyEntities())
        {
            return dbContext.vTrackings.Where(e => e.Tracking == id).Distinct().ToList();
        }
    }
}
}

现在,当我运行它时,它基本上采用从 SQL 结果屏幕截图返回的第一行并将该数据复制四次。

在此处输入图像描述

起初,我认为问题在于控制器文件以及我如何编码以传递跟踪 ID。但是当我对问题进行故障排除时,我意识到如果我只是去http://localhost:60850/api/tracking/并且不包含跟踪号,这意味着它会返回每个跟踪号,那么该页面上的结果显示相同事物。第一行数据重复 4 次,其他数据集的模式相同。所以我认为问题实际上在于数据模型文件,但我尝试过的任何方法都没有产生与 SQL 视图的简单 SQL 选择语句相同的结果。谢谢您的帮助。

标签: c#asp.netsql-serverasp.net-web-apiado.net

解决方案


推荐阅读