Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体框架迁移中将项目移动到项目列表_C#_Entity Framework_Asp.net Mvc 5 - Fatal编程技术网

C# 在实体框架迁移中将项目移动到项目列表

C# 在实体框架迁移中将项目移动到项目列表,c#,entity-framework,asp.net-mvc-5,C#,Entity Framework,Asp.net Mvc 5,我正在使用Asp.NETMVC5和EntityFramework6。我有一张这样的桌子: public class Recipe { [Required] public virtual Food Food { get; set; } //...rest } public class Recipe { [Required] public virtual Food Food { get; set; } public virtual IList&l

我正在使用Asp.NETMVC5和EntityFramework6。我有一张这样的桌子:

public class Recipe
{
    [Required]
    public virtual Food Food { get; set; }

    //...rest
}
public class Recipe
{
    [Required]
    public virtual Food Food { get; set; }

    public virtual IList<Food> Foods { get; set; }

    //... rest
}
现在我想把
食物
移动到食物列表中。像这样:

public class Recipe
{
    public virtual IList<Food> Foods { get; set; }

    //... rest
}
但是迁移会添加第二个外键,并且无法更新。以下是失败的迁移代码:

    public override void Up()
    {
        DropForeignKey("dbo.Recipes", "Food_ID", "dbo.Foods");
        DropIndex("dbo.Recipes", new[] { "Food_ID" });
        AddColumn("dbo.Foods", "Recipe_Id", c => c.Int());
        AddColumn("dbo.Foods", "Recipe_Id1", c => c.Int());
        AlterColumn("dbo.Recipes", "Food_ID", c => c.Int());
        CreateIndex("dbo.Foods", "Recipe_Id");
        CreateIndex("dbo.Foods", "Recipe_Id1");
        CreateIndex("dbo.Recipes", "Food_ID");
        AddForeignKey("dbo.Foods", "Recipe_Id", "dbo.Recipes", "Id");
        AddForeignKey("dbo.Foods", "Recipe_Id1", "dbo.Recipes", "Id");
        AddForeignKey("dbo.Recipes", "Food_ID", "dbo.Foods", "ID");
    }

如何将单个
食物
移动到
食物
列表中,而不丢失表中的当前数据?

创建迁移后,您需要自定义迁移

  • 修改实体类


  • 食谱
    食品
    之间的原始关系是什么?看起来您正在尝试从一对一(外键在
    食谱
    表中)转换为一对多(外键在
    食品
    表中)?非常感谢。工作完美无瑕。仅更正:
    WHERE Foods.ID=r.Food\u ID
    在您的
    UPDATE
    语句中。
    public class Recipe
    {
        public virtual IList<Food> Foods { get; set; }
    
        //... rest
    }
    
    public override void Up()
    {
        DropForeignKey("dbo.Recipes", "Food_ID", "dbo.Foods");
        DropIndex("dbo.Recipes", new[] { "Food_ID" });
        AddColumn("dbo.Foods", "Recipe_Id", c => c.Int());
    
        // Update values from existing data, not sure if the syntax is perfect
        Sql(@"UPDATE dbo.Foods SET Recipe_Id = r.Id
              FROM (SELECT Id, Food_ID FROM dbo.Recipes) AS r
              WHERE Foods.ID = r.Food_ID");
    
        DropColumn("dbo.Recipes", "Food_ID");
        CreateIndex("dbo.Foods", "Recipe_Id");
        AddForeignKey("dbo.Foods", "Recipe_Id", "dbo.Recipes", "Id");
    }