存储过程在Code First中为Guids抛出错误

时间:2016-05-09 18:59:29

标签: c# sql-server entity-framework stored-procedures guid

我有一个GuidId作为Guid类型主键的实体。我试图调用一个具有GuidId作为Sql参数的存储过程,但是我收到此错误

Incorrect syntax near '@Id'.

CreateStoredProcedure("dbo.MyStoredProc",
         param => new
         {
             Id = param.String()
         },
        body:
        @"DECLARE @GuidId uniqueidentifier = convert(uniqueidentifier, @Id)
        ...");

repository.ExecuteQuery("EXEC MyStoredProc @Id", 
                        new SqlParameter("@Id", entity.GuidId.ToString()));

public void ExecuteQuery(string query, params object[] parameters)
    {
        dbContext.Database.ExecuteSqlCommand(query, parameters);
    }

我认为将Guids传递给SQL有一些问题,这就是为什么我尝试将其作为字符串传递然后转换它的原因。如果在Sql中执行,存储过程可以正常工作,但这里有什么问题?

1 个答案:

答案 0 :(得分:0)

如果GuidId PK属于Guid类型,则传递参数entity.GuidId.ToString()时出错。您应该将GuidId声明为字符串,并保持其他内容相同,或者不将参数转换为String。