2017-01-17 50 views
0

我正在创建一个Asp.net MVC应用程序,其中我有Recipe ModelRecipeCategory模型。我想食谱模型包含foreign keyRecipeCategory模型。我是Entity Framework的新手。我正在使用实体框架的code first方法。 我已经定义recipeCategory模型如下:在ASP.net中创建外键关系MVC实体框架代码首先

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; } 
} 

我想要什么:

  1. 在创建新的配方,我想用户界面中的类别列表来选择RecipeCategories,但我无法得到。

  2. 我想在两个表之间建立正确的外键。请帮我解决这个

回答

1

你的关系是正确的。为了获得更多改进,我建议您的ICollection使用复数名称,而不是Recipe,而用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; } 
} 

现在您已经说过您无法获得食谱分类,所以您可以发布您正在使用的代码吗?

它应该是这样的: 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; 
} 
+0

我创建视图配方模型,并在创建视图,我没有从列表中选择类别选项?如果我的关系正确,我该怎么办? –

+0

我必须得到单独的食谱分类?我从强类型模型食谱创建视图?它不应该存在于创作视图中吗? –

+0

好的。因此,在您的创建操作方法中,您需要从数据库获取RecipeCategories的列表,然后将其存储在ViewBag中。然后在您的视图中,您可以渲染viewbag的下拉菜单。请参考http://stackoverflow.com/questions/16594958/how-to-use-a-viewbag-to-create-a-dropdownlist和http://www.compilemode.com/2016/01/bind- dropdownlist-using-viewbag-in-asp-net-mvc.html @DelicateHiba –

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; } 
} 
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; } 
} 
相关问题