很抱歉很长的解释但是简短的问题。如有问题,您可以直接查看除此之外的2个粗体样式文本。
我创建了我的第一个EF6 CODE FIRST项目来学习新功能。我试图实现基于新存储过程的CRUD操作。
此处演示的模型实体之一如下:
public partial class POCO
{
//identy
public int ID { get; set; }
// SQL Server Timestamp
// this.Property(t => t.RowVersion).IsFixedLength().HasMaxLength(8).IsRowVersion();
public byte[] RowVersion { get; set; }
public int MiscPropery { get; set; }
}
该实体使用SQL服务器的RowVersion作为concurency令牌,当然是“Database Generated Concurency”。
首先:我自己创建了相关的存储过程。我拒绝了EF6文档Stored Procedure Mapping
然后:EntityFramework 6创建了数据库和存储过程。
EntityFramework 6 created insert stored procedure:
CREATE PROCEDURE [dbo].[POCO_Update]
@ID [int],
@RowVersion_Original [rowversion],
@MiscPropery [int]
-- ------- I hope here: @RowsAffected int OUTPUT
AS
BEGIN
UPDATE [dbo].[POCOs]
SET [MiscPropery] = @MiscPropery
WHERE (([ID] = @ID) AND (([RowVersion] = @RowVersion_Original)
OR ([RowVersion] IS NULL AND @RowVersion_Original IS NULL)))
SELECT t0.[RowVersion], t0.[FaturaNo]
FROM [dbo].[POCOs] AS t0
WHERE @@ROWCOUNT > 0 AND t0.[ID] = @ID
END
EntityFramework 6 created delete stored procedure:
CREATE PROCEDURE [dbo].[POCO_Delete]
@ID [int],
@RowVersion_Original [rowversion]
-- ------- I hope here: @RowsAffected int OUTPUT
AS
BEGIN
DELETE [dbo].[POCOs]
WHERE (([ID] = @ID) AND (([RowVersion] = @RowVersion_Original)
OR ([RowVersion] IS NULL AND @RowVersion_Original IS NULL)))
END
我的问题在这一点上来了:
IN EntityFramework 6文档页面,在“并发标记”部分中说:(http://entityframework.codeplex.com/wikipage?title=Code%20First%20Insert%2fUpdate%2fDelete%20Stored%20Procedure%20Mapping)
并发令牌
并在该文档页面上提供这些示例:
// from documentation page
public class Person
{
public int PersonId { get; set; }
public string Name { get; set; }
[Timestamp]
public byte[] Timestamp { get; set; }
}
CREATE PROCEDURE [dbo].[Person_Update]
@PersonId int,
@Name nvarchar(max),
@Timestamp_Original rowversion,
@RowsAffected int OUTPUT -- ====> !!!!!
AS
BEGIN
UPDATE [dbo].[People]
SET [Name] = @Name
WHERE PersonId = @PersonId AND [Timestamp] = @Timestamp_Original
SET @RowsAffected = @@RowCount
END
但是在EF6创建的存储过程中没有名为RowsAffected的输出参数。 我必须更改自动处理的存储过程以遵循文档,或文档被破坏?或者一切都在窗帘之下。