从数据库检索对象出现问题

本文关键字:问题 对象 数据库 检索 | 更新日期: 2023-09-27 18:29:03

这件事在过去的一个小时里一直困扰着我,我无法找出到底出了什么问题。我正试图从我们的数据库中检索一个对象以及其他几个对象(返回良好)。我得到一个异常

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;
    }
}

存储库

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这两个对象都继承自PropertyId派生自的同一PropertyBase类。

从数据库检索对象出现问题

问题必须是PropertyId在一种类型中定义为int,在另一种类型中将定义为string

如果是这样,这应该有效:

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

或者您可以将存储库项更改为int.

我找到了问题的解决方案。我的一位同事更改了数据库中某个字段(不是propertyid,另一个无关字段)的数据类型,但没有更改程序中的数据类型。我自己完全忘记了零钱。我现在觉得很傻。