Я новичок в .NET FRAMEWORK и пытаюсь придумать ASP.NET MVC API для недвижимости.
В моей базе данных есть таблица Product and Amenity. Я предполагаю, что продукт, например, квартира может иметь несколько удобств, например [{'Gym'}, {'Wifi'}]. Поэтому я создал еще одну таблицу ProductAmenity, которая ссылается на Product и Amenity.
До сих пор я придумал класс продукта, класс удобства и класс продукта с соответствующим Контроллером продуктов и Контроллером продуктов. В настоящее время, когда я делаю запрос get на свой ProductsController, он возвращает все остальные значения, кроме того, что возвращает значение NULL в Object-ProductAmenity, несмотря на то, что они являются данными в таблице ProductAmenity.
Here are my controllers:
namespace api_realEstate.Controllers
{
public class ProductsController : ApiController
{
readonly RealEstateDBEntities entities;
public ProductsController()
{
entities = new RealEstateDBEntities();
}
private List<ProductView> PrepProducts(List<Product> dbProducts)
{
var productsView = new List<ProductView>();
foreach (var product in dbProducts)
{
productsView.Add(
new ProductView
{
Id = product.ID,
Category = product.Category,
Address = product.Location,
Amount = product.Price,
Beds = product.Bathroom,
Baths = product.Bedroom,
Area = product.Area,
Parking = product.Parking,
ParkingSpot = product.ParkingSpot,
Description = product.Description,
Term = product.Term,
UserId = product.UserID
});
}
return productsView;
}
public IHttpActionResult Get()
{
var dbProducts = entities.Products.ToList();
return Ok(PrepProducts(dbProducts));
}
}
}
namespace api_realEstate.Controllers
{
public class AmenitiesController : ApiController
{
readonly RealEstateDBEntities entities;
public AmenitiesController()
{
entities = new RealEstateDBEntities();
}
private List<AmenityView> PrepAmenities(List<Amenity> dbAmenities)
{
var amenitiesView = new List<AmenityView>();
foreach (var amenity in dbAmenities)
{
amenitiesView.Add(
new AmenityView
{
Id = amenity.ID,
Itemname = amenity.ItemName
});
}
return amenitiesView;
}
public IHttpActionResult Get()
{
var dbAmenities = entities.Amenities.ToList();
return Ok(PrepAmenities(dbAmenities));
}
}
}
namespace api_realEstate.Controllers
{
public class ProductAmenitiesController : ApiController
{
readonly RealEstateDBEntities entities;
public ProductAmenitiesController()
{
entities = new RealEstateDBEntities();
}
private List<ProductAmenityView> PrepProductAmenities(List<ProductAmenity> dbProdAmenity)
{
var prodamenityView = new List<ProductAmenityView>();
foreach (var prodamenity in dbProdAmenity)
{
prodamenityView.Add(
new ProductAmenityView
{
Id = prodamenity.ID,
Productid = prodamenity.ProductID,
Amenityid = prodamenity.AmenityID
});
}
return prodamenityView;
}
public IHttpActionResult Get()
{
var dbProdAmenity = entities.ProductAmenities.ToList();
return Ok(PrepProductAmenities(dbProdAmenity));
}
}
}
Here are my classes:
public partial class Product
{
public Product()
{
this.ProductAmenities = new HashSet<ProductAmenity>();
this.ProductImages = new HashSet<ProductImage>();
}
public long ID { get; set; }
public string Category { get; set; }
public string Location { get; set; }
public int Price { get; set; }
public int Bedroom { get; set; }
public int Bathroom { get; set; }
public Nullable<int> Area { get; set; }
public string Parking { get; set; }
public Nullable<int> ParkingSpot { get; set; }
public string Description { get; set; }
public string Term { get; set; }
public long UserID { get; set; }
public virtual User User { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<ProductAmenity> ProductAmenities { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<ProductImage> ProductImages { get; set; }
}
public partial class Amenity
{
public Amenity()
{
this.ProductAmenities = new HashSet<ProductAmenity>();
}
public long ID { get; set; }
public string ItemName { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<ProductAmenity> ProductAmenities { get; set; }
}
public partial class ProductAmenity
{
public long ID { get; set; }
public long ProductID { get; set; }
public long AmenityID { get; set; }
public virtual Amenity Amenity { get; set; }
public virtual Product Product { get; set; }
}
Я ожидаю, что при выполнении запроса (GET) к моему ProductsController у меня должны быть значения, возвращенные в моем объекте ProductAmenity.
Как я могу применить отношения между этими таблицами: Product, Amenity и ProductAmenity в моем контроллере?