我正在使用这些模型:
public class FList
{
public int FListID { get; set; }
public string Title { get; set; }
public int UserID { get; set; }
public DateTime Posted { get; set; }
public virtual User User { get; set; }
public ICollection<FListItem> Items { get; set; }
}
public class Item
{
public int ItemID { get; set; }
public string Name { get; set; }
public ICollection<FListItem> FLists { get; set; }
}
public class FListItem
{
public int FListID { get; set; }
public int ItemID { get; set; }
public int Score { get; set; }
public virtual FList FList { get; set; }
public virtual Item Item { get; set; }
}
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public ICollection<FList> FLists { get; set; }
}
使用这个流畅的API,在FListItem上创建一个复合主键。
modelBuilder.Entity<FaveListItem>().HasKey(fi => new { fi.FaveListID, fi.ItemID });
modelBuilder.Entity<FList>()
.HasMany(f => f.Items)
.WithRequired(fi => fi.FList)
.HasForeignKey(fi => fi.FListID);
modelBuilder.Entity<Item>()
.HasMany(f => f.FLists)
.WithRequired(fi => fi.Item)
.HasForeignKey(fi => fi.ItemID);
如果我为FList
添加控制器,则会创建以下脚手架
public ActionResult Index()
{
var fLists = db.FLists.Include(f => f.User);
return View(fLists.ToList());
}
允许在索引视图上迭代fLists
。
我需要做的是包含Items
,可以为每个fList
进行迭代。我无法使用Include
,因为Items
上没有FList
导航属性。
我想我需要在Join
上Items
fList
并使用IEnumerable创建一个viewModel,以允许Items
的迭代。
如果上述推理是正确的,请任何人可以提供建议吗?如果是,请协助Join
?
答案 0 :(得分:1)
你走在正确的轨道上。如果创建视图模型,则将为Flist viewmodel类中的项指定导航属性。一旦完成,您将无需更改包含,它将自动生效。
你的viewmodel看起来像......
public class FList
{
[Key]
public int FListID { get; set; }
public string Title { get; set; }
public int UserID { get; set; }
public DateTime Posted { get; set; }
public virtual User User { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
public class Item
{
[Key]
public int ItemID { get; set; }
public string Name { get; set; }
public ICollection<FListItem> FLists { get; set; }
}
答案 1 :(得分:1)
您还可以Include
项目:
db.FLists.Include(f => f.User)
.Include(f => f.Items.Select(i => i.Item))
我不知道视图模型的样子,但是FList
的项目可以通过
fList.Items.Select(i => i.Item)
顺便说一下,我更喜欢为ICollection<FListItem>
个收藏品和#34; FListItem&#34;命名,以免将它们与真实的Items
或FLists
混淆分别。