2010-11-28 1 views
2

Im настраивает поставщика OData в визуальной студии. Ошибка, которую im im действительно не имеет ничего общего с OData.Зачем мне получать «Член с идентификатором« ReturnValue »не существует в коллекции метаданных« ошибка?

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

{"The member with identity 'ReturnValue' does not exist in the metadata collection. Parameter name: identity"}

Это StackTrace:

at System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter) at System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache) at System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options) at System.Data.Objects.ObjectContext.SaveChanges() at OData.CreateWorkOrder(Int32 CreatedByContactID) in D:\Web\OData.svc.vb:line 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 
+0

Код, пожалуйста (покажите нам содержимое OData.svc.vb в строке 31). Как вы отправляете данные в базу данных. Похоже, вы пытаетесь отправить «ReturnValue», когда поле не существует в БД. – 2010-11-28 21:35:42

ответ

0

Я предполагаю, что это erroring линия

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 
0

идентичности Ключ чувствителен к регистру. Pls проверяет, правильно ли он указан в качестве параметра. Пример:

context.mCustomersReference.EntityKey = new EntityKey("BulkEntities.CustomerSet", "CustomerId", Convert.ToInt64(id)); 

 Смежные вопросы

  • Нет связанных вопросов^_^