在ASP.net MVC实体框架代码中创建外键关系

时间:2017-01-17 04:56:43

标签: c# asp.net-mvc entity-framework foreign-keys

我正在创建一个Asp.net MVC应用程序,其中我有Recipe ModelRecipeCategory模型。我希望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; }
}

我想要的是什么:

  1. 在创建新食谱时,我想要UI中的类别列表来选择RecipeCategories但我无法理解。

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

3 个答案:

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