Sql server 使用反向POCO生成器为实体框架生成存储过程
我正在使用Entity Framework Reverse POCO Generator 2.19.0处理现有数据库 在我添加一个从多个表(包括临时表)中进行选择的存储过程之前,一切都很好,我希望工具(POCO生成器)生成一个实体来存储该存储过程返回的值,但它只是生成一个返回Int而不是预期对象的函数 我应该如何构造存储过程,或者poco生成器希望选择什么类型的存储过程? 这是程序Sql server 使用反向POCO生成器为实体框架生成存储过程,sql-server,entity-framework,stored-procedures,Sql Server,Entity Framework,Stored Procedures,我正在使用Entity Framework Reverse POCO Generator 2.19.0处理现有数据库 在我添加一个从多个表(包括临时表)中进行选择的存储过程之前,一切都很好,我希望工具(POCO生成器)生成一个实体来存储该存储过程返回的值,但它只是生成一个返回Int而不是预期对象的函数 我应该如何构造存储过程,或者poco生成器希望选择什么类型的存储过程? 这是程序 CREATE PROCEDURE [dbo].[GetAccountStatement] --Historial
CREATE PROCEDURE [dbo].[GetAccountStatement] --Historial de transacciones
@MembershipID BIGINT
, @pagina INT = 1
, @npag INT = 100
AS
DECLARE @sql NVARCHAR(MAX),
@offset INT,
@NumeroTransacciones BIGINT,
@AccountID BIGINT
SELECT
@offset = (@pagina - 1) * @npag
SET FMTONLY OFF
SELECT
transactionCheck_Rel.CheckID,
AmountTotal AS Accrual,
0 AS Redemption INTO #TransactionAux_t4
FROM transactionCheck_Rel
JOIN [transaction]
ON [transaction].TransactionID = transactionCheck_Rel.TransactionID
AND TransactionTypeID = 4
SELECT
transactionCheck_Rel.CheckID,
0 AS Accrual,
AmountTotal AS Redemption INTO #TransactionAux_t3
FROM transactionCheck_Rel
JOIN [transaction]
ON [transaction].TransactionID = transactionCheck_Rel.TransactionID
AND TransactionTypeID = 3
SELECT
#TransactionAux_t4.CheckID,
#TransactionAux_t4.Accrual,
ISNULL(#TransactionAux_t3.redemption, 0) AS redemption INTO #TransactionAux
FROM #TransactionAux_t4
LEFT JOIN #TransactionAux_t3
ON #TransactionAux_t3.CheckID = #TransactionAux_t4.CheckID
ORDER BY #TransactionAux_t4.CheckID
INSERT INTO #TransactionAux
SELECT
#TransactionAux_t3.CheckID,
#TransactionAux_t3.Accrual,
ISNULL(#TransactionAux_t3.redemption, 0) AS redemption
FROM #TransactionAux_t3
SELECT
#TransactionAux.CheckID,
[dbo].[check].StoreID,
store.SystemName,
dbo.[check].NetAmount,
account.AccountID,
#TransactionAux.Accrual,
#TransactionAux.redemption,
account.InitialBalance,
account.FinalBalance,
dbo.[transaction].TransactionID,
dbo.[transaction].BusinessDate,
dbo.membershipAccount_Rel.MembershipID
FROM dbo.account
LEFT JOIN dbo.assignCheck
ON assignCheck.AccountID = account.AccountID
LEFT JOIN [dbo].[check]
ON [check].CheckID = assignCheck.CheckID
LEFT JOIN #TransactionAux
ON #TransactionAux.CheckID = [check].CheckID
JOIN dbo.[transaction]
ON [transaction].AccountID = account.AccountID
JOIN dbo.transactionDetail
ON transactionDetail.TransactionID = [transaction].TransactionID
LEFT JOIN transactionCheck_Rel
ON transactionCheck_Rel.TransactionID = [transaction].TransactionID
LEFT JOIN dbo.store
ON store.StoreID = [check].StoreID
JOIN dbo.membershipAccount_Rel
ON membershipAccount_Rel.AccountID = account.AccountID
ORDER BY membershipAccount_Rel.MembershipID ASC OFFSET @offset ROWS FETCH NEXT @npag ROWS ONLY
这就是《反向POCO生成器》的作者西蒙·休斯(Simon Hughes)对这个问题的回答 问题: “我在存储过程中使用了临时表,但该类不是 由于在SP中使用此临时表而生成“ 回答: “在生成器中无法执行任何操作。但是,您可以执行以下操作: 将存储过程更改为表值函数,以及 定义要返回的表。我确信我最近提到了这一点 在某处,他举了一个例子。” 我进一步浏览了论坛,还没有找到他提到的例子。你最好直接在论坛上提问。我以前在那里问过问题,西蒙反应很好
这可能也有帮助。这是《反向POCO生成器》的作者西蒙·休斯在中对这个问题的回答 问题: “我在存储过程中使用了临时表,但该类不是 由于在SP中使用此临时表而生成“ 回答: “在生成器中无法执行任何操作。但是,您可以执行以下操作: 将存储过程更改为表值函数,以及 定义要返回的表。我确信我最近提到了这一点 在某处,他举了一个例子。” 我进一步浏览了论坛,还没有找到他提到的例子。你最好直接在论坛上提问。我以前在那里问过问题,西蒙反应很好
这可能也会有帮助。能否显示存储过程?我使用的是2.18.1版,对于POCO生成器在返回模型的上下文中创建方法没有任何问题。@BBauer42我将其添加到问题中。您是否手动在.tt文件中执行了一些奇怪的操作?例如,StoredProcedureFilterExclude或存储过程重命名/返回类型下的部分?您是否尝试过创建一个简单的存储过程来选择一个或两个字段以查看是否生成了ReturnModel?没有什么奇怪的,没有涉及StoredProcedurFilters。我尝试了一个包含多个联接的查询,结果一切正常,返回模型生成正确。您能显示存储过程吗?我使用的是2.18.1版,对于POCO生成器在返回模型的上下文中创建方法没有任何问题。@BBauer42我将其添加到问题中。您是否手动在.tt文件中执行了一些奇怪的操作?例如,StoredProcedureFilterExclude或存储过程重命名/返回类型下的部分?您是否尝试过创建一个简单的存储过程来选择一个或两个字段以查看是否生成了ReturnModel?没有什么奇怪的,没有涉及StoredProcedurFilters。我尝试了一个包含多个连接的查询,结果一切正常,返回模型生成正确。谢谢@BBauer42。刚刚看到这个:-)迟做总比不做好。。。应该为存储过程生成一个返回模型。如果不是,则选择“是”,尝试使用正确声明返回的列类型的表值函数包装存储过程。或者尝试使用假数据协定声明返回类型@BBauer42。刚刚看到这个:-)迟做总比不做好。。。应该为存储过程生成一个返回模型。如果不是,则选择“是”,尝试使用正确声明返回的列类型的表值函数包装存储过程。或者尝试使用伪数据协定声明返回类型