我使用的是MVC,C#和EntityFramework。
我已经在很多对很多人的加入中看到了不同的解决方案,经过大量的修修补补后,我让它在Linqpad工作。但是当我在我的解决方案中尝试它时,我得到一个错误,因为其中一个表不在我的DBContext中。
我有两个可见表,一个隐藏。物品,食谱和RecipeItems。
所有食谱都基于一个项目,并使用两个或多个项目。 所以我想要一个列表,IEnumerable或类似的物品和食谱中的数据指定这个食谱,然后我想要制作食谱所需的所有物品。
以下查询适用于LinqPad
var t = from r in Recipes
join i in Items on r.ItemId equals i.Id
select new {FinalProduct = r.FinalProduct, Effect= i.Effect,
Description = r.Description, Ingredients = r.RecipeItems.Select(g => g.Item)};
当我在我的解决方案中执行此操作时,我收到错误,因为我的DBContext只包含Recipe和Items但没有RecipeItems。实体框架在没有我的情况下处理这个问题。
我试图在没有任何运气的情况下制作DbSet<RecipeItems>
。你们中有谁建议我如何向前迈进。
项目类
public class Item
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Effect { get; set; }
public bool Published { get; set; }
public virtual ICollection<Recipe> Recipe { get; set; }
}
食谱类
public class Recipe
{
[Key]
public int Id { get; set; }
public int ItemId { get; set; }
[Display(Name = "Final Product")]
public string FinalProduct { get; set; }
public string Description { get; set; }
public RecipeGroup RecipeGroup { get; set; }
public bool Published { get; set; }
public virtual ICollection<Item> Ingredients { get; set; }
}
食谱中的ItemId用于设置配方将生成的实际项目。
答案 0 :(得分:0)
尝试将此添加到您的食谱对象:
public Recipe()
{
this.Ingredients = new HashSet<Item>();
}
这会覆盖类的默认构造函数,并为EF提供初始化相关对象的位置。