Я добавил сохраненный процесс через Entity Framework 4.0 Model.
Case1 :
Мой сохраненный процесс возвращает набор целых чисел (1,2,3,4 ...) и я выбрал Int32 в качестве коллекции возврата модели EntityFramework, и сгенерированный код теперь выглядит следующим образом:
public ObjectResult<Nullable<global::System.Int32>> CopyAssembly(Nullable<global::System.Int32> assemblyId)
{
ObjectParameter assemblyIdParameter;
if (assemblyId.HasValue)
{
assemblyIdParameter = new ObjectParameter("assemblyId", assemblyId);
}
else
{
assemblyIdParameter = new ObjectParameter("assemblyId", typeof(global::System.Int32));
}
return base.ExecuteFunction<Nullable<global::System.Int32>>("CopyAssembly", assemblyIdParameter);
}
Когда я его запускаю var res = (new SPEntities()).CopyAssembly(1);
, я не получаю ошибки.Набор целых чисел возвращается, как и ожидалось.Я даже вижу в SQL Profiler, что запрос отправляется.
Case2 :
Я изменил свой сохраненный процесс, поэтому теперь он возвращает набор строк (col1, col2).Эта таблица соответствует EntityA .В Entity Framework Model я выбрал EntityA в качестве коллекции возврата.Сгенерированный код для этого теперь:
public ObjectResult<EntityA> CopyAssembly(Nullable<global::System.Int32> assemblyId)
{
ObjectParameter assemblyIdParameter;
if (assemblyId.HasValue)
{
assemblyIdParameter = new ObjectParameter("assemblyId", assemblyId);
}
else
{
assemblyIdParameter = new ObjectParameter("assemblyId", typeof(global::System.Int32));
}
return base.ExecuteFunction<EntityA>("CopyAssembly", assemblyIdParameter);
}
Когда я запускаю его var res = (new SPEntities()).CopyAssembly(1);
, я всегда получаю следующую ошибку: An item with the same key has already been added.
Я даже НЕ вижу запрос в SQL Profiler.
Почему CASE1 работает, а CASE2 - нет?Почему в CASE2 даже при отсутствии запроса к SQL (я не вижу его в профилировщике) я STILL получаю ошибку?Логичнее будет получать сообщение об ошибке после отправки запроса в SQL
Спасибо