Почему я получаю сообщение об ошибке «Член с идентификатором ReturnValue не существует в коллекции метаданных»? - PullRequest
2 голосов
/ 29 ноября 2010

Я настраиваю поставщика OData в visual studio.Ошибка, которую я получаю, на самом деле не имеет ничего общего со стороной OData.

У меня есть тип таблицы в моей модели данных объекта ado, и всякий раз, когда я пытаюсь вставить запись в эту таблицу, я получаю следующую ошибку:

{"Элемент с идентификатором ReturnValue не существует в коллекции метаданных. Имя параметра: identity"}

Это трассировка стека:

в System.Data.Mapping.Update.Internal.UpdateTranslator.Update (IEntityStateManager stateManager, адаптер IEntityAdapter) в System.Data.EntityClient.EntityAdapter.Update (IEntityStateManager entityCachebjectObject.Object.Object.Object.Object.Object.Object.Object.Ob.SaveChanges (параметры SaveOptions) в System.Data.Objects.ObjectContext.SaveChanges () в OData.CreateWorkOrder (Int32 CreatedByContactID) в D: \ Web \ OData.svc.vb: строка 31

Есть кто-нибудьслышал об этой ошибке?Я могу вставить штрафа в любую другую таблицу, просто кажется, что это единственная таблица, с которой модель данных объекта ado не хочет играть.

Заранее спасибо

''# this comment is just here because the code formatter doesn't play nice otherwise.
<WebGet()> _
Public Function CreateWorkOrder(ByVal CreatedByContactID As Integer) As WorkOrder
    Dim x As New MyAppEntities

    Dim wo As WorkOrder = MyApp.WorkOrder.CreateWorkOrder(Nothing, 100, 4, False, DateTime.Now, False, 0, 1, 0, 0, 0, 0, 0, 0, False, 0, 0, 0, False, CreatedByContactID, DateTime.Now, 1, DateTime.Now)
    x.AddToWorkOrders(wo)
    x.SaveChanges()
    Return wo
End Function

Ответы [ 2 ]

0 голосов
/ 17 января 2013

Идентификационный ключ чувствителен к регистру.Пожалуйста, проверьте, правильно ли он указан в качестве параметра.Пример:

context.mCustomersReference.EntityKey = new EntityKey("BulkEntities.CustomerSet", "CustomerId", Convert.ToInt64(id));
0 голосов
/ 29 ноября 2010

Я предполагаю, что это строка с ошибкой

Dim wo As WorkOrder = MyApp.WorkOrder.CreateWorkOrder(Nothing, 100, 4, False, DateTime.Now, False, 0, 1, 0, 0, 0, 0, 0, 0, False, 0, 0, 0, False, CreatedByContactID, DateTime.Now, 1, DateTime.Now)

Теперь первый параметр - «Ничего», поэтому я предполагаю, что он должен быть «Возвращаемым значением» хранимой процедуры (являютсяВы используете хранимые процедуры?).

Если вы на самом деле используете хранимую процедуру с чем-то вроде @ID int output, то вам нужен правильный выходной параметр в вашем коде

        Dim IDOut As Integer
        Dim wo As WorkOrder = MyApp.WorkOrder.CreateWorkOrder(IDOut, 100, 4, False, DateTime.Now, False, 0, 1, 0, 0, 0, 0, 0, 0, False, 0, 0, 0, False, CreatedByContactID, DateTime.Now, 1, DateTime.Now)

        ''# Do crap with IDOut like redirect to http://example.com?workorder=[IDOut]

Но какВ своем комментарии я сказал, что вам лучше использовать LINQ to SQL и избегать хранимых процедур для простых вставок.

Что-то вроде

    Public Sub GenerateWorkOrder()

        Dim workOrder As New WorkOrder
        With workOrder
             .somestringParameter1 = "the parameter"
             .someintegerParameter1 = 5
             ''# etc
        End With

        CreateWorkOrder(workOrder)
        SubmitChanges()

    End Sub


    Public Sub CreateWorkOrder(ByVal workOrder As WorkOrder)
        ''# dc is simply the DataContext
        dc.WorkOrders.InsertOnSubmit(workOrder)
    End Sub

    Public Sub SubmitChanges()
        dc.SubmitChanges()
    End Sub
...