我有一个products
表,其中CategoryId
表示Categories
表中的相应主键。根据外键ID将列值传递到不同的表格进行建模
ProductViewModel
public ProductVM(ProductDTO productDTO)
{
Id = productDTO.Id;
Name = productDTO.Name;
Description = productDTO.Description;
Price = productDTO.Price;
CategoryId = productDTO.CategoryId;
ImageName = productDTO.ImageName;
}
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
[Required]
public decimal Price { get; set; }
public int? CategoryId { get; set; }
public IEnumerable<SelectListItem> Categories { get; set; }
public string ImageName { get; set; }
public IEnumerable<string> GalleryImages { get; set; }
产品DTO
public class ProductDTO
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Slug { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public int CategoryId { get; set; }
public string ImageName { get; set; }
[ForeignKey("CategoryId")]
public virtual CategoryDTO Category { get; set; }
}
这是我得到的产品列表:
List<ProductVM> productVM;
using (Db db = new Db())
{
productVM = db.Products
.ToArray()
.Select(x => new ProductVM(x))
.ToList();
}
正如你可以看到我传递了CategoryId
左右,我可以用ProductVM
ViewModel在我的视图中显示它,但是我也想要获得该类别中的Name
。
我可以想到一些黑客,例如,根据CategoryId
从ViewModel
中的构造函数访问DB
并指定它,但是我想查看是否有更优雅的解决方案?底线 - 我在我的Categories
表中有一个Name
列,我想以最有效的方式将该名称传递给ProductVM
。
'productVM = db.Products.Include(X => X。类别)。选择(...'并为'CategoryName'添加一个属性,以便您可以使用'CategoryName = productDTO.Category.Name'; –
@StephenMuecke我没有收到任何intellisense,'productVM = db.Products .include(x => x。)'给了我一个错误,我还添加了CategoryName proeprty并更新了我的Q. – frc
什么错误? (并包括'使用System.Data.Entity;')? - 你总是可以使用'.Include(“Category”)'而不是 –