Служба данных WCF: неверный запрос - ошибка в синтаксисе запроса

1

У меня есть приложение службы данных WCF. Внутренняя база данных Ingress и использует nHibernate.

Я пытаюсь извлечь и обновить записи из одной из таблиц. Его структура приведена ниже:

Изображение 174551

Первые три выделенные столбцы делают первичный ключ.

В моем клиентском приложении я запрашиваю данные, как показано ниже:

private void LoadItemDetails(string itemCode, int commentDate)
{
    using(var dc = new MyDataContext(new Uri("http://myservice.myserver.com/Dev/com.OData/IngressData.svc")))
    {
        var itemDetails = dc
            .ItemLineDetails
            .Where(d => d.ItemCode.Equals(itemCode) &&
                        ld.CommentDate == commentDate);

        ObsItemLineDetails = new ObservableCollection<ItemLineDets>();
    }
}

Затем я обновляю и сохраняю данные, как показано ниже:

private void SaveItemDetails()
{
    using(var dc = new MyDataContext(new Uri("http://myservice.myserver.com/Dev/com.OData/IngressData.svc")))
    {
        foreach(var itemLine in ObsItemLineDetails )
        {
            var today = DateTime.Today.AddSeconds(-1);
            var newCommentDate = (Int32)(today.Subtract(new DateTime(1970, 1, 1,0,0,0))).TotalSeconds;

            var itemDetail = dc.ItemLineDetails.Where(d => d.ItemCode.Equals(itemLine.ItemCode) && 
                d.LineId == itemLine.LineId && 
                d.SearchDate == itemLine.SearchDate).FirstOrDefault();
            if (itemDetail != null)
            {
                itemDetail.CommentDate = newCommentDate;
                itemDetail.Comments = GetAutoComment();
                dc.UpdateObject(itemDetail);                    
            }
        }                     
        dc.SaveChanges();
    } 
}

Он вызывает исключение в последней строке при SaveChanges. Ниже приведена запись журнала сервера IIS.

15:52:42.7823 Trace 20 com.OData.DataServiceBase'1 Received: http://myservice.myserver.com/Dev/com.OData/IngressData.svc/ItemLineDetails(ItemCode='001/152/0101',LineId=3,SearchDate=11070945856)
15:52:42.7823 Error 20 com.OData.DataServiceBase'1 Bad Request - Error in query syntax.
at System.Data.Services.RequestUriProcessor.ParsePath(Uri absoluteRequestUri, IDataService service)
at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service, Boolean internalQuery)
at System.Data.Services.DataService'1.HandleRequest()    at System.Data.Services.RequestUriProcessor.ParsePath(Uri absoluteRequestUri, IDataService service)
at System.Data.Services.RequestUriProcessor.ProcessRequestUri(Uri absoluteRequestUri, IDataService service, Boolean internalQuery)
at System.Data.Services.DataService'1.HandleRequest()

Я думаю, что это, вероятно, прямые косые черты в моем поле ITEM_CODE, вызывающие эту проблему.

Если это так, есть ли какое-либо обходное решение для этого.

Теги:
wcf
wcf-data-services

1 ответ

0

попытайтесь добавить использование в DataContext в функцию вместо глобального объекта контекста, как показано ниже

private void SaveItemDetails()
{

using(context dc = new context())
{
    foreach(var itemLine in ObsItemLineDetails )
        {
            var today = DateTime.Today.AddSeconds(-1);
            var newCommentDate = (Int32)(today.Subtract(new DateTime(1970, 1, 1,0,0,0))).TotalSeconds;

            var itemDetail = dc.ItemLineDetails.Where(d => d.ItemCode.Equals(itemLine.ItemCode) && 
                d.LineId == itemLine.LineId && 
                d.SearchDate == itemLine.SearchDate).FirstOrDefault();
            if (itemDetail != null)
            {
                itemDetail.CommentDate = newCommentDate;
                itemDetail.Comments = GetAutoComment();
                dc.UpdateObject(itemDetail);                    
            }
        }                     
        dc.SaveChanges(); 
}
}
  • 0
    DataContext инициализируется локально. К сожалению, я пропустил эти строки в своем вопросе. Смотрите мой обновленный вопрос, пожалуйста.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню