Я использую. NET Проект веб-API Core 3.0. При настройке отношений у меня есть свойство модели с именем ProductTypeID
, которое является внешним ключом, содержащим идентификатор таблицы ProductType
. Когда я запрашиваю UnitOfWork
и возвращаю этот результат в контроллер, я sh удаляю productTypeID
из JSON.
ProductsController:
[HttpGet]
public IEnumerable<Product> Index()
{
var products = _service.GetAll();
return products;
}
Репозиторий ( где он в конечном итоге возвращает данные, обратно в сервис, затем обратно в контроллер):
public override IEnumerable<Product> GetAll()
{
return _context.products
.Include(x => x.ProductType)
.AsEnumerable();
}
ProductSeeder:
_modelBuilder.Entity<ProductType>().HasData(new ProductType
{
ID = 1,
Name = "Pizza"
});
_modelBuilder.Entity<Product>(x =>
{
x.HasOne(d => d.ProductType)
.WithMany()
.HasForeignKey(p => p.ProductTypeID);
});
_modelBuilder.Entity<Product>().HasData(
new Product {
ProductTypeID = 1,
ID = 1,
Name = "Pepperoni",
Price = 12m,
Description = "Test Description"
},
new Product
{
ProductTypeID = 1,
ID = 2,
Name = "Margherita",
Price = 10m,
Description = "This is a margherita pizza"
}
);
Модель продукта:
public class Product : BaseModel
{
[Required]
public string Name { get; set; }
[Required]
[Column(TypeName = "decimal(18,2)")]
public decimal Price { get; set; }
[Required]
public string Description { get; set; }
public int ProductTypeID { get; set; }
public virtual ProductType ProductType { get; set; }
}
Возвращено JSON в браузере:
[
{
"name": "Pepperoni",
"price": 12,
"description": "Test Description",
"productTypeID": 1,
"productType": {
"name": "Pizza",
"id": 1,
"createdAt": "20/01/2020 19:28:26",
"updatedAt": "20/01/2020 19:28:26"
},
"id": 1,
"createdAt": "20/01/2020 19:28:26",
"updatedAt": "20/01/2020 19:28:26"
},
{
"name": "Margherita",
"price": 10,
"description": "This is a margherita pizza",
"productTypeID": 1,
"productType": {
"name": "Pizza",
"id": 1,
"createdAt": "20/01/2020 19:28:26",
"updatedAt": "20/01/2020 19:28:26"
},
"id": 2,
"createdAt": "20/01/2020 19:28:26",
"updatedAt": "20/01/2020 19:28:26"
}
]
Я считаю, что если я создам ViewModel
и верну его только с теми свойствами, которые мне нужны, это будет работать. Но я хотел бы знать, есть ли способ сделать это без создания ViewModel
.