2013-12-14 3 views
0

Я учусь рамка сущности и при редактировании записи я получил эту ошибку:Ошибка возникает при получении объекта

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

Пожалуйста, подсказывает, как это исправить. Вот код для него.

tblUser obj = new tblUser(); 

using (var ctx = new TestEntities2()) 
{ 
    var stud = (from s in ctx.tblUsers 
       where s.Id.ToString() == RouteData.Values["Id"].ToString() 
       select s).FirstOrDefault(); 
    obj.Fname = model.Fname; 
    obj.Lname = model.Lname; 
    obj.Username = model.UserName; 
    obj.Email = model.Email; 
    obj.PhoneNumber = model.PhoneNumber; 

    int num = ctx.SaveChanges(); 
} 
+0

возможно дубликат [Entity Framework метод ToString] (http://stackoverflow.com/questions/18169388/entity-framework-tostring-method) – DarkWalker

+0

Если 'RouteData.Values ​​[ "Id"]' является число, то вам лучше преобразовать его в число за пределами 'use' и сравнить его непосредственно с' s.Id'. –

+0

@ZevSpitz его GUID – Supreet

ответ

2

Я думаю, вы получаете сообщение об ошибке, потому что RouteData.Values["Id"] передается как объект, но основной тип является строкой.

Если вы ожидаете Guid, тогда вы должны сначала проанализировать значение RouteData и сравнить Guid to Guid. Обычно это лучше, чем сравнение строки с строкой. Вот пример кода, чтобы вы начали. При получении данных от пользователя вы всегда должны сначала проверить его на достоверность.

using (var ctx = new TestEntities2()) 
{ 
    Guid routeId; 
    if (Guid.TryParse(RouteData.Values["Id"].ToString, out routeId)) 
    { 
     // var stud = (from s in ctx.tblUsers 
        // where s.Id.ToString() == RouteData.Values["Id"].ToString() 
        // select s).FirstOrDefault(); 
     var stud = ctx.tblUsers.Find(routeId); // simpler and faster 
     // Always check that the query returned something 
     if (stud != null) 
     { 
      // Do stuff 
     } 
    } 
    else 
    { 
     // display a message to the user that something went wrong 
    } 
} 
Смежные вопросы