ОКОНЧАТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: я поставлю ответ здесь вверху для других людей, которые ищут. Основная проблема заключалась в несоответствии пространства имен, вызванном тем, что db-first сгенерировал EDM, присоединив «.Models» к концу пространства имен модели. Это пространство имен не соответствовало пространству имен odata, поэтому маршрут не работал. Я только что удалил все вхождения «.Models» из пространства имен, и теперь это работает.
Новичок пробует Breeze с настройкой webApiOdata. Извините, если этот вопрос тривиален.
У меня есть модель edmx, сгенерированная базой данных, с контроллерами webapi odata. У меня были проблемы с отображением правильных метаданных, пока я не прочитал о новом 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, как мне установить наборы сущностей, чтобы я мог направлять к правильным данным?
Я надеюсь, что вопрос имеет смысл.
* РЕДАКТИРОВАТЬ: я добавил список 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; }
}
}
а вот контроллер клиентов
...
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;
}
...
Вот класс клиента.
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; }
}
}