实体框架中的OPENQUERY存储过程

时间:2017-07-18 10:06:02

标签: c# sql-server db2

我正在尝试创建一个存储过程,它从链接到我们的Sql Server DB2服务器获取值。在存储过程中,我有这个查询:

DECLARE @CarID nvarchar(10)
DECLARE @TSQL varchar(8000)
SET @CarID = '1111'
  SELECT  @TSQL = 'SELECT * FROM OPENQUERY(LINKEDSERVER,''SELECT * FROM TestTable WHERE Column LIKE ''''' + @CarID + '%' + ''''''')'
  EXEC (@TSQL)

Everithing工作正常但是当我将存储过程添加到Entity模型时,过程的签名是:

GetUsers(string):int

但是当我运行该过程时返回数据行。如何修改过程以返回不是整数的数据集?

1 个答案:

答案 0 :(得分:0)

EF处理与标量函数有些相似的存储过程。 EF不知道您的存储过程中将选择多少数据集和哪些列,因此无法生成类。

在链接服务器上选择内容的最佳方法是使用视图。 只需使用四个部件名称创建视图,然后将其添加到EF数据模型中。然后EF将能够生成该类。

CREATE VIEW [dbo].[vTestTable]
AS
    Select * from [LINKEDSERVER].[DatabaseName].[Schema].[TestTable]
GO

然后在.NET

var result = db.vTestTable.Where(t=> t.Column.StartsWith(CarId)).ToList();
相关问题