2

这是我的 MVC 控制器,一切都很好:

    private UnitOfWork UOW;
    public InventoryController()
    {
        UOW = new UnitOfWork();
    }

    // GET: /Inventory/
    public ActionResult Index()
    {
        var products = UOW.ProductRepository.GetAll().ToList();
        return View(products);
    }

API 控制器中的相同方法调用给了我一个 Http 500 错误:

    private UnitOfWork _unitOfWork;
    public TestController()
    {
        _unitOfWork = new UnitOfWork();
    }

    public IEnumerable<Product> Get()
    {
        var products = _unitOfWork.ProductRepository.GetAll().ToList();
        return products;
    }

调试表明,两个控制器的 UOW 调用中确实都返回了数据。然后我在 Global 中添加了一个客户配置:

    public static void CustomizeConfig(HttpConfiguration config)
    {
        config.Formatters.Remove(config.Formatters.XmlFormatter);
        var json = config.Formatters.JsonFormatter;
        json.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }

我仍然只在 API 控制器中收到 Http 500,不知道为什么。有任何想法吗?

更新:

似乎使用延迟加载导致了问题。当我将关联属性设置为非虚拟时,测试 API 提供了必要的 JSON 字符串。然而,在我包含 Vendor 类之前,我只有 VendorId。我真的很想包括相关的类。有任何想法吗?我知道那里有很多聪明人。任何人?

4

1 回答 1

1

问题解决了:

毕竟问题不在于延迟加载。问题是,虽然我在产品中正确地与供应商建立了关联,但我在供应商中也有一系列产品,这可能导致了一些循环:

public class Product 
{
    public int Id { get; set; }
    public string Name { get; set; }

    public int VendorId { get; set; }
    public virtual Vendor Vendor { get; set; }
}

public class Vendor 
{
    public int Id { get; set; }
    //public Vendor()
    //{
    //    Products = new List<Product>();
    //}

    public string CompanyName { get; set; }
  //  public ICollection<Product> Products { get; set; }
}

在 Vendors 中省略集合并在 Products 中恢复虚拟就可以了。

                    "vendor": {
                        "id": 4,
                        "companyName": "Vendor 3"
                    },
                    "id": 1,
                    "name": "Product 1",
                    "vendorId": 4
                },
                {
                    "vendor": {
                        "id": 2,
                        "companyName": "Vendor 4"
                    },
                    "id": 2,
                    "name": "Product 2",
                    "vendorId": 2
                },
                {
                    "vendor": {
                        "id": 3,
                        "companyName": "Vendor 2"
                    },
                    "id": 3,
                    "name": "Product 3",
                    "vendorId": 3
                },
                {
                    "vendor": {
                        "id": 1,
                        "companyName": "Vendor 1"
                    },
                    "id": 4,
                    "name": "Product 4",
                    "vendorId": 1
                }]
于 2012-09-28T15:34:12.027 回答