【发布时间】:2014-03-31 18:41:59
【问题描述】:
从 Entity Framework 调用 ExecuteStoreQuery 时出现以下错误(使用代码优先方法)。
数据读取器有多个字段。多个字段对 EDM 基元或枚举类型无效。
但我的插入/更新操作反映在数据库中。
知道这个问题吗?
这是来自 c# 的代码
long Id=0;
SqlParameter paramoutput = new SqlParameter()
{
ParameterName = "Result",
Value = "",
SqlDbType = System.Data.SqlDbType.BigInt,
Size = 100,
Direction = System.Data.ParameterDirection.Output
};
var mydata = (dataContext as IObjectContextAdapter).ObjectContext
.ExecuteStoreQuery<long>("exec Save @MarkupId, @ApiId, @MainBranchId, @Title, @Markup, @IsPercentage, @IsDomestic, @CreatedOn, @CreatedBy, @ModifiedOn, @ModifiedBy, @IsActive, @Result out",
new SqlParameter("@MarkupId", generalMarkupModel.Id),
new SqlParameter("@ApiId", generalMarkupModel.ApiId),
new SqlParameter("@MainBranchId", generalMarkupModel.MainBranchId),
new SqlParameter("@Title", generalMarkupModel.Title),
new SqlParameter("@Markup", generalMarkupModel.Markup),
new SqlParameter("@IsPercentage", generalMarkupModel.IsPercentage),
new SqlParameter("@IsDomestic", generalMarkupModel.IsDomestic),
new SqlParameter("@IsActive", generalMarkupModel.IsActive),
new SqlParameter("@CreatedOn", DateTime.Now),
new SqlParameter("@CreatedBy", "ajc"),
new SqlParameter("@ModifiedOn", DateTime.Now),
new SqlParameter("@ModifiedBy", "ajm"),
paramoutput);
Id = Convert.ToInt64(paramoutput.Value.ToString());
return Id;
存储过程执行insert操作并将@@identity设置为输出参数。
这是我的存储过程:
ALTER PROCEDURE mypocedurename-here
@MarkupId bigint,
@ApiId int,
@MainBranchId int,
@Title varchar(50),
@Markup float ,
@IsPercentage bit,
@IsDomestic bit,
@CreatedOn datetime,
@CreatedBy varchar(50),
@ModifiedOn datetime,
@ModifiedBy varchar(50),
@IsActive bit,
@Result bigint OUTPUT
AS
BEGIN
INSERT INTO GeneralMarkups
(
ApiId,
MainBranchId,
Title,
Markup,
IsPercentage ,
IsDomestic ,
IsActive ,
CreatedOn,
CreatedBy,
ModifiedOn,
ModifiedBy
)
VALUES
(
@ApiId,
@MainBranchId,
@Title,
@Markup ,
@IsPercentage ,
@IsDomestic,
@IsActive ,
@CreatedOn,
@CreatedBy,
@ModifiedOn,
@ModifiedBy
)
select @Result=@@IDENTITY
END
【问题讨论】:
-
邮政编码!我不知道你在说什么。您需要发布给出错误的代码,我们或许可以为您提供帮助。
-
我们也需要那个存储过程。
-
我建议使用
SCOPE_IDENTITY()而不是其他任何东西来获取新插入的标识值。 See this blog post for an explanation as to WHY -
这是一个存储过程 - 就像一个procedure,它存储在你的SQL Server中。它不是“store”过程(与“store”无关),也不是“storeprocedure”(这个词在英语中甚至不存在)
标签: c# sql-server entity-framework stored-procedures ef-code-first