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 呼び出しでデータが返されていることを示しています。次に、グローバルに顧客構成を追加しました。

    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を受信して​​おり、その理由について途方に暮れています。何か案は?

アップデート:

遅延読み込みを使用して問題が発生したようです。関連するプロパティを NON-VIRTUAL に設定すると、Test 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 の virtual を元に戻すとうまくいきました。

                    "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 に答える