我正在创建一个Asp.net MVC应用程序,其中我有Recipe Model
和RecipeCategory
模型。我希望Recipe模型包含foreign key
模型的RecipeCategory
。我是Entity Framework的新手。我正在使用实体框架的code first
方法。
我的recipeCategory
模型定义如下:
public class RecipeCategory
{
public int RecipeCategoryID { get; set; }
public string Name { get; set; }
public List<Recipe> Recipe { get; set; }
}
我的食谱模型类如下:
public class Recipe
{
public int ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int RecipeCategoryID { get; set; }
public RecipeCategory RecipeCategory { get; set; }
}
我想要的是什么:
在创建新食谱时,我想要UI中的类别列表来选择RecipeCategories但我无法理解。
我希望在两个表之间建立正确的外键。请帮我解决这个问题
答案 0 :(得分:3)
你的关系是正确的。为了进一步改进,我建议您的ICollection的复数名称意味着食谱而不是食谱,并用ICollection替换List。
public class RecipeCategory
{
public int RecipeCategoryID { get; set; }
public string Name { get; set; }
public ICollection<Recipe> Recipes { get; set; }
}
public class Recipe
{
public int ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int RecipeCategoryID { get; set; }
public RecipeCategory RecipeCategory { get; set; }
}
现在谈谈要点,因为你说你无法获得RecipeCategories所以请你发布你正在使用的代码吗?
它应该是这样的: 1.您必须创建一个从DbContext继承的上下文类,并且您必须在DbSets中定义了这两个实体。
public class YourContext: DbContext
{
public YourContext():
base("yourConnectionString")
{
}
public DbSet<Recipe> Recipes { get; set; }
public DbSet<RecipeCategory> RecipeCategories { get; set; }
}
之后你可以像这样返回你的类别:
public IEnumerable<RecipeCategory> Get()
{
YourContext context = new YourContext();
return context.RecipeCategories;
}
答案 1 :(得分:1)
您需要在表中放置外键约束。
[ForeignKey("ObjName")]
在你的情况下,
public class Recipe
{
public int ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
[ForeignKey("RecipeCategory")]
public int RecipeCategoryID { get; set; }
public RecipeCategory RecipeCategory { get; set; }
}
答案 2 :(得分:0)
public class RecipeCategory
{
[Key][DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int RecipeCategoryID { get; set; }
public string Name { get; set; }
public List<Recipe> Recipe { get; set; }
}
public class Recipe
{
public int ID { get; set; }
public virtual int RecipeCategoryID { get; set; }
[ForeignKey("RecipeCategoryID ")]
public virtual ApplicationUser ApplicationUser { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int RecipeCategoryID { get; set; }
public RecipeCategory RecipeCategory { get; set; }
}