【问题标题】:OPENQUERY stored procedure in Entity framework实体框架中的 OPENQUERY 存储过程
【发布时间】:2017-07-18 10:06:01
【问题描述】:

我正在尝试创建一个从链接到我们的 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)

一切正常,但是当我将存储过程添加到实体模型时,过程的签名是:

GetUsers(string):int

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

【问题讨论】:

  • 实体不知道存储过程的返回类型。请改用同义词或视图。
  • 谢谢。请给我一个例子。

标签: c# sql-server db2


【解决方案1】:

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2013-03-19
    • 2016-09-18
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多