最終編集:検索している他の人のために、ここで答えを一番上に置きます。主な問題は、db-first で生成された EDM がモデルの名前空間の末尾に「.Models」をアタッチすることによって発生した名前空間の不一致でした。この名前空間は odata 名前空間と一致しなかったため、ルートは失敗していました。名前空間から「.Models」のすべての出現を編集したところ、今では機能しています。
webApiOdata をセットアップして Breeze を試す初心者。この質問が些細なことでしたら申し訳ありません。
webapi odata コントローラーを使用して db で生成された edmx モデルがあります。新しい Breeze EdmBuilder について読むまで、正しいメタデータを表示するのに問題がありました。
これにより、正しいメタデータを表示するという問題は解決しましたが、現在、どのテーブルにもルーティングできません。/odata/Customers を試すと、406 エラーが発生します。
以前は、ODataConventionModelBuilder を使用して EntitySets を設定していましたが、問題なく動作していました。
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Detail>("Details");
builder.EntitySet<Item>("Items");
builder.EntitySet<Order>("Orders");
builder.EntitySet<Customer>("Customers");
EdmBuilder を使用しているので、適切なデータにルーティングできるように EntitySets を設定するにはどうすればよいですか?
質問が理にかなっていることを願っています。
*編集: GCSodContext のリストと Customers コントローラーのスニペットを追加しました。
namespace GCSbz3.Models
{
using System;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
public partial class GCSodContext : DbContext
{
public GCSodContext()
: base("name=GCSodContext")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
public virtual DbSet<Customer> Customers { get; set; }
public virtual DbSet<Detail> Details { get; set; }
public virtual DbSet<Item> Items { get; set; }
public virtual DbSet<Order> Orders { get; set; }
}
}
ここにCustomersコントローラーがあります
...
using System.Web.Http;
using System.Web.Http.ModelBinding;
using System.Web.Http.OData;
using System.Web.Http.OData.Routing;
using GCSbz3.Models;
namespace GCSbz3.Controllers
{
public class CustomersController : ODataController
{
private GCSodContext db = new GCSodContext();
// GET odata/Customers
[Queryable]
public IQueryable<Customer> GetCustomers()
{
return db.Customers;
}
...
これが Customer クラスです。
namespace GCSbz3.Models
{
using System;
using System.Collections.Generic;
public partial class Customer
{
public Customer()
{
this.Orders = new HashSet<Order>();
}
public int CustID { get; set; }
public string FName { get; set; }
public string LName { get; set; }
public string Phone { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
}