2016-05-09 3 views
0

のプライマリキーにGuidのエンティティがあります。私はなぜそれがだ、SQLに渡したGUIDに何か問題があることを推測する私は、SQLパラメータとしてGuidIdを持つストアドプロシージャを呼び出すためにしようとしていますが、私はコード内のGUIDのストアドプロシージャスローエラー

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); 
    } 

このエラーが出ます文字列として渡して変換しようとしました。ストアドプロシージャはSqlで実行された場合に動作しますが、ここで間違っていますか?

+0

私はGUIDがプライマリキーとして、クラスタ化されたインデックスではないことを願っています。 1,000行の少数で99%の断片化を超えます。クラスタード・インデックスでは、別の列を使用する方が適しています。あるいは、クラスタード・インデックスのデフラグを継続して行う必要があります。 –

答えて

0

GuidId PKがGuidタイプの場合、パラメータentity.GuidId.ToString()を渡す際にエラーが発生しています。 GuidIdを文字列として宣言して、他のものを同じものに保つか、またはパラメータtoStringを変換しないでください。