2013-08-26 4 views
1

Это беспокоило меня в течение последнего часа, и я не могу понять, что именно происходит. Я пытаюсь получить объект из нашей базы данных вместе с несколькими другими объектами (которые возвращают штраф). Я получаю исключениеИзвлечение объекта из базы данных

object of type 'system.string' cannot be converted to type 'system.int32' 

Что странно, потому что есть только две переменные в игре здесь, и оба имеют тип данных INT. Вот код.

Контроллер

public ActionResult EditGABuyContract(int id) 
    { 
     var p = PropertyService.GetPropertyBy(id); 
     if (p == null) 
      return RedirectToRoute(new { Controller = "Dashboard", Action = "Index" }); 
     var purchase = PropertyService.GetPropertyPurchaseBy(id); //This works just fine 
     var buyContract = PropertyService.GetGABuyContractById(id); //This leads to the exception 


... 

Сервис

public PropertyGABuyContract GetGABuyContractById(int propertyid) //This leads to an exception 
{ 
    try 
    { 
     return ((IRepositoryBase)PropertyRepository).GetByPropertyId<PropertyGABuyContract>(propertyid); 


    } 
    catch (Exception ex) 
    { 
     Log.Error(ex); 
     return null; 
    } 
} 

public PropertyPurchase GetPropertyPurchaseBy(int propertyid) //This does NOT lead to an exception 
{ 
    try 
    { 
     return ((IRepositoryBase) PropertyRepository).GetByPropertyId<PropertyPurchase>(propertyid); 


    } 
    catch (Exception ex) 
    { 
     Log.Error(ex); 
     return null; 
    } 
} 

Repository

public T GetByPropertyId<T>(int id) where T : PropertyBase, new() 
{ 
    return repo.Single<T>(t => t.PropertyId == id); //Exception occurs here for only GetGABuyContract() method and not for the GetPropertyPurchaseById() method 
} 

Это исключение не Имею смысл для меня. оба объекта PropertyPurchase и PropertyGABuyContract наследуют от того же класса PropertyBase, из которого вызывается PropertyId.

ответ

0

Проблема должна быть PropertyId определена как int одного типа и string в другом.

Если так это должно работать:

t => int.Parse(t.PropertyId.ToString()) == id 

или вы могли бы изменить пункт хранилище в целое.

+0

Nope. Я попробовал t => int.Parse (t.PropertyId.ToString()) == int.Prase (id.toString()), и он по-прежнему возвращал ту же ошибку. Свойство PropertyId определяется как int в обеих таблицах в SQL, и оно определено в классе PropertyBase как int. Невозможно, чтобы либо переменная, которую я передаю, либо поле имела строку, не получая ошибку во время назначения, я пытаюсь назначить строку целому числу, так как я объявляю их явно. –

0

Я нашел решение проблемы. Один из моих коллег изменил тип данных одного из полей (не propertyid, другого несвязанного) в базе данных, но не в программе. Я совсем забыл об этом изменении. Теперь я чувствую себя глупо.

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