我如何首先使用实体框架数据库检索产品的相关类别?
我为此目的使用此sql查询:
SQL查询:
SELECT Products.*, Categories.Title
FROM Products, Products_Categories, Categories
WHERE (Products.ID = Products_Categories.Product_ID AND Products_Categories.Category_ID = Categories.ID)
这个等效的 lambda表达式是什么?
经过大量研究后,我尝试了以下代码:
HomeController中的C#:
products = oDB.Products.Include(m => m.Products_Categories.Select(a => a.Category))
.ToList();
之后,我应该使用以下方法之一访问产品类别标题:
// i and j are indices
string title = products[i].Products_Categories.Select(x => x.Category).ToList()[j].Title;
string title_0 = products[i].Products_Categories.ToList()[j].Category.Title;
此代码的问题在于,当我将产品对象传递给视图时,我无法访问该类别:
return View(products);
我正在寻找这样的代码:
在.cshtml文件中:
@model List<olomrayanehDB.Product>
...
@item.Products_Categories.Category.Title // ERROR! this is not working for many to many relations, but I know there's almost the same way coding for one to many relations.
总之,我如何将产品对象传递给视图,其中包含所有相关数据,例如类别的标题? (我知道一对多关系的解决方案,这里的问题是多对多关系与联结表)
答案 0 :(得分:0)
不确定为什么您的对象不会被填充,但是:
你不需要有Product_Categories。您可以让EF将其直接映射到Products中的Category列表。
modelBuilder.Entity<Product>()
.HasMany<Category>(s => s.Categories)
.WithMany(c => c.Products)
.Map(cs =>
{
cs.MapLeftKey("ProductId");
cs.MapRightKey("CategoryId");
cs.ToTable("Product_Category");
});