У меня есть простая база данных с пятью таблицами, связанными друг с другом отношениями. Я создал приложения OData раньше и, как модель, но хотел сделать скачок в веб-API. Проблема в том, что, например, когда я звоню в таблицу ProductType, она возвращает КАЖДУЮ запись в каждой таблице! Что дает?Web API - Entity Framework пытается разрушить мою жизнь
Моя цель состоит в том, чтобы вызвать ProductType, например, как это: URL/API/ProductType (и обычный GetByID, удалять и т.д.)
Я использую шаблон репозитория, и выполните следующие действия: 1. Создайте модель Entity Framework с таблицами, которые я хочу отобразить. Йон. 2. Добавьте интерфейс в Модели, назовите его IProductTypeRepository, с поведением, которое я хочу видеть. 3. Добавьте класс модели (ProductModel.cs), который наследуется от этого интерфейса 4. Убедитесь, что у Global.asax есть либо установка по умолчанию api, либо класс App_Start \ Routeconfig и WebApiConfig. 5. Хирургия в классе ValuesController.
Возможно, это связано с незнанием того, как WebAPI должен работать с отношениями. Возможно, цель состоит в том, чтобы сделать один вызов службы - и получить КАЖДУЮ запись на нескольких таблицах (например, Product и ProductDetails). Если это так, я думаю, что документация могла бы быть более ясной в этом вопросе!
====================== = =============================== 0 0 сказать, что он содержит сущности и объединения для пяти таблиц - ProductType, Location, Process, Step и StepType. ProductType - очень простая таблица с полем ID, поле описания и поля № (MaterialMasterId).
Для IProductTypeRepository, вот мой код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Perceptive.Services.Models
{
interface IProductTypeRepository
{
IEnumerable<ProductType> GetAll();
ProductType GetById(int ProductTypeID);
int Update(ProductType producttype);
ProductType Add(ProductType producttype);
void Delete(int ProductTypeId);
}
}
Для ProducTTypeModel: с использованием системы; с использованием System.Collections.Generic; с использованием System.Linq; с использованием System.Web;
namespace Perceptive.Services.Models
{
public class ProductTypeModel : IProductTypeRepository
{
private PCSEntities1 context = new PCSEntities1();
public IEnumerable<ProductType> GetAll()
{
return context.ProductTypes;
}
public ProductType GetById(int ProductTypeId)
{
IQueryable<ProductType> producttypes = context.ProductTypes.Where(a => a.ProductTypeID == ProductTypeId);
return producttypes.FirstOrDefault();
}
public int Update(ProductType producttype)
{
ProductType updateProductType = context.ProductTypes.FirstOrDefault(c => c.ProductTypeID == producttype.ProductTypeID);
updateProductType.Description = producttype.Description.Trim();
updateProductType.MaterialMasterID = producttype.MaterialMasterID;
return context.SaveChanges();
}
public ProductType Add(ProductType producttype)
{
var addedProductType = context.ProductTypes.Add(producttype);
context.SaveChanges();
return addedProductType;
}
public void Delete(int producttypeid)
{
ProductType producttype = context.ProductTypes.FirstOrDefault(a => a.ProductTypeID == producttypeid);
context.ProductTypes.Remove(producttype);
context.SaveChanges();
}
}
}
... и, наконец, мой контроллер - ProductTypeController.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
//dh added
using Perceptive.Services.Models;
namespace Perceptive.Services.Controllers
{
public class ProductTypeController : ApiController
{
IProductTypeRepository repository = new ProductTypeModel();
// GET /api/Producttype
[HttpGet]
public IEnumerable<ProductType> Get()
{
return repository.GetAll();
}
// GET /api/Producttype/5
[HttpGet]
public ProductType Get(int id)
{
ProductType producttype = repository.GetById(id);
return producttype;
}
// POST /api/ProducTtype
[HttpPost]
public void PostProductType(ProductType producttype)
{
repository.Add(producttype);
}
// PUT /api/ProductType
// DH seems scanty here. Where's the repository put?
[HttpPut]
public void PutProductType(ProductType producttype)
{
if (repository.Update(producttype) == 0)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
}
//DELETE /api/ProductType/5
[HttpDelete]
public void Delete (int id)
{
repository.Delete(id);
}
}
}
Спасибо за последующие действия - к сожалению, это не работает. Я получаю результаты от обеих объединенных таблиц: [{"$ id": "1", "Процессы": [{"$ id": "2", "ProductType": {"$ ref": "1 "}," ProcessID ": 1," ProductTypeID ": 1," LocationID ": 2," ProcessName ":« First Inspection »,« ProcessNumber »:« S10 »,« ProcessOrder »: 10,« CreateByID »: 1, «CreateDate»: «2013-11-11T00: 00: 00», «EndDate»: null, «LastUpdateDate»: «2013-11-11T00: 00: 00», «ModifiedByID»: 1} – user3062620
Вы получите все связанные данные по умолчанию. – Maess