我们正在使用Entity Framework 6.0.0并首先使用数据库(像这样)从表和存储过程生成代码.这似乎很有效,除了在更新或刷新模型时不反映存储过程的更改.反映了向表中添加列,但未向存储过程添加字段.
有趣的是,如果我转到Model Browser,右键单击存储过程,选择Add Function Import并单击按钮,Get Column Information我们可以看到正确的列.这意味着模型知道列,但无法更新生成的代码.
有一种解决方法,即在更新模型之前删除生成的存储过程.只要您没有对存储过程进行任何编辑,这就可以工作.有谁知道避免这种解决方法的方法?
Visual Studio 2013截至2013年12月初,我正在使用所有最新更新.
提前致谢!
更新1: andersr的回答有助于一个案例,其中存储过程使用临时表,所以我给了他+1,但它仍然无法解决更新简单存储过程的主要问题.
更新2: shimron的评论下面链接到关于EF 3.5中相同问题的问题.对于EF 6.0来说,似乎仍然如此.阅读它是为了另一种方法,但我现在的结论是,最简单的方法是在更新模型之前删除生成的存储过程.如果你想做一些奇特的事情,可以使用部分课程.
stored-procedures entity-framework ef-database-first entity-framework-6 visual-studio-2013
我有以下存储过程,当我尝试功能导入时,我说我的存储过程不返回任何列.我错过了什么?有什么建议?
Proc:
ALTER PROCEDURE [healthc].[ev_kc_Products_Search]
(
@SearchString VARCHAR(1000)
)
AS
SET NOCOUNT ON
DECLARE @SQL VARCHAR(max),
@SQL1 VARCHAR(max),
@Tag VARCHAR(5)
CREATE TABLE #T
( ID INT,
VendorName VARCHAR(255),
ItemName VARCHAR(255),
Type VARCHAR(2),
Sequence TINYINT
)
SET @SQL = '
INSERT #T
SELECT VendorID ID,
Name VendorName,
NULL ItemName,
''V'' Type,
0 Sequence
FROM tblVendors
WHERE '+REPLACE(@SQL1,@Tag,'Name')+'
UNION ALL
BLAH BLAH BLAH'
EXEC(@SQL)
SELECT ID, VendorName, ItemName, Type FROM #T
Run Code Online (Sandbox Code Playgroud) 我有一个包含动态选择的存储过程.像这样的东西:
ALTER PROCEDURE [dbo].[usp_GetTestRecords]
--@p1 int = 0,
--@p2 int = 0
@groupId nvarchar(10) = 0
AS
BEGIN
SET NOCOUNT ON;
DECLARE @query NVARCHAR(max)
SET @query = 'SELECT * FROM CUSTOMERS WHERE Id = ' + @groupId
/* This actually contains a dynamic pivot select statement */
EXECUTE(@query);
END
Run Code Online (Sandbox Code Playgroud)
在SSMS中,存储过程运行正常并显示结果集.
在使用实体框架的C#中,它显示返回int而不是IEnumerable?
private void LoadTestRecords()
{
TestRecordsDBEntities dataContext = new TestRecordsDBEntities();
string id = ddlGroupId.SelectedValue;
List<TestRecord> list = dataContext.usp_GetTestRecords(id); //This part doesn't work returns int
GridView1.DataSource = …Run Code Online (Sandbox Code Playgroud) 我正在尝试将tableadapter添加到我的SQL Server 2005 Express中的存储过程.但是,存储过程使用名为#temp的临时表.创建表适配器时,Visual Studio会抱怨"未知对象'#temp'"并表示存储过程返回0列.这是有问题的,因为我使用带有水晶报表的存储过程,并且需要这些列.
我怎样才能解决这个问题?
t-sql stored-procedures sql-server-2005-express strongly-typed-dataset visual-studio-2008
可能重复:
EF4 - 所选存储过程不返回任何列
我有一个存储过程,它填充#temp表,对其记录执行操作,然后选择记录.
问题是,当我尝试创建函数导入并单击[获取列信息]时,结果窗格显示消息"所选存储过程或函数不返回任何列".
现在,我知道它确实返回了列,因为如果我直接从db运行它,我会得到预期的结果集.
存储过程可以总结如下:
SELECT P.PersonID, P.Surname, P.NickName, P.DateofBirth
INTO #SeriesCompleted
FROM
Table1 T (NOLOCK)
INNER JOIN
Table2 P (NOLOCK) ON T.PID = P.PID
;
Select r.PID, SUM(rt.Distance) 'Distance'
INTO #Distance
FROM
#SeriesCompleted sc
inner join table3 rsr (NOLOCK) on rsr.SeriesId = sc.SeriesId
inner join table4 r (NOLOCK) on r.PID = sc.PID
inner join table5 rt (NOLOCK) on rt.RouteID = r.RouteID
GROUP BY r.PID;
UPDATE #SeriesCompleted
SET Distance = d.Distance
FROM #SeriesCompleted sc
INNER JOIN #Distance …Run Code Online (Sandbox Code Playgroud) 在模型浏览器中创建函数导入时,获取列信息不会返回任何列,可能原因是这样
我的存储过程从临时表返回数据,并在程序结束时删除该表.
我不确定,请确认,如果是这种情况,没有列信息,那么创建复杂类型对于这种情况也是不可能的.
请建议我如何手动为其列信息未通过功能导入屏幕解析的过程创建复杂类型.
谢谢