不确定问题出在哪里...我写了一个存储过程(在SQL Server Mgmt.Studio中执行时)返回我希望看到的结果:
USE [DataViewer]
GO
/****** Object: StoredProcedure [dbo].[DV_GetPSCTreeNodes] Script Date: 08/10/2014 1:48:03 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Me!>
-- Description: <Used by data viewer GUI.>
-- =============================================
ALTER PROCEDURE [dbo].[DV_GetPSCTreeNodes]
-- Add the parameters for the stored procedure here
@iNodeLevel int,
@iParentNodeId bigint
AS
BEGIN
SET NOCOUNT ON;
DECLARE @sQuery varchar (2000)
IF @iNodeLevel >= 5
RETURN
ELSE
-- Insert statements for procedure here
SET @sQuery = 'SELECT * FROM DataView.dbo.v_Tree
WHERE L' + CAST((@iNodeLevel + 1) AS VARCHAR(10)) + 'ID IS NULL
AND L' + CAST((@iNodeLevel) AS VARCHAR(10)) + 'ID = ' + CAST((@iParentNodeId)
AS VARCHAR(10))
EXEC (@sQuery)
END
如上所述,如果我在SMSS中运行它,我会得到预期的结果。
但是,如果我通过我设置的服务运行它,我会得到正确数量的记录,但它们都是第一行的重复(我可以看一下表,知道我得到的重复) 。如果我尝试新的params并在SSMS中返回15个不同的行,我的网页将显示15行重复的第1行数据。
以下是我客户的电话:
List<v_PowerSystemCIMTree> list = null;
DVServiceClient proxy = new DVServiceClient();
try
{
list = proxy.DV_GetPSCTreeNodes(2,325550).ToList(); //2 and 325550 are just hardcoded to
//check to see if it's working
}
catch (Exception ex)
{
Console.WriteLine(ex.GetType().FullName);
Console.WriteLine(ex.Message);
}
finally
{
proxy.Close();
}
return View(list);
哪个叫我的服务:
readonly DataViewerEntities _Context = new DataViewerEntities();
public List<DataViewer_DAL.v_PowerSystemCIMTree> DV_GetPSCTreeNodes(int firstParam,
long secondParam)
{
return _Context.DV_GetPSCTreeNodes(firstParam,secondParam).ToList();
}
为什么我会在Management Studio中获得一个结果集,但在我的网页上重复数据?
答案 0 :(得分:3)
已知问题:由于您从视图中选择了没有定义的主键,因此实体框架将使用所有非可空的列为&#34;实体键&#34;。
如果EF从具有相同实体键的视图中读取第二行(所有非可空列中的值相同),它将只重复已读取的第一行 - 它将不查看其他剩下的栏目....
因此,您只需要将基础表的主键添加到视图列中,将EF数据模型调整为显式定义&#34;实体密钥&#34;对于视图,或者您需要在视图中添加一个人工的,唯一的列(如ROW_NUMBER()
),并确保它不可为空,因此是EF&#34;衍生的&#34的一部分;实体密钥