繁体   English   中英

使用代码优先工作流使用 Update-Database 时出现异常

[英]Exception when using Update-Database using code first workflow

我有一个Movie model 和一个Genre class 如下:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace web_template_001.Models
{
    public class Movie
    {
        [Required]
        public int Id { get; set; }
        [Required]
        [StringLength(25)]
        public string Title { get; set; }
        [Required]
        public Genre Genre { get; set; }
        public byte GenreId { get; set; }
        public DateTime DateAdded { get; set; }
        public DateTime ReleaseDate { get; set; }
        public byte NumberInStock { get; set; }
    }

    public class Genre
    {
        [Required]
        public byte Id { get; set; }
        [Required]
        [StringLength(25)]
        public string Name { get; set; }
    }
}

在创建此处显示的迁移后尝试使用Update-Database时:

namespace web_template_001.Migrations
{
    using System;
    using System.Data.Entity.Migrations;
    
    public partial class ModifiedMovieProperties : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.Genres",
                c => new
                    {
                        Id = c.Byte(nullable: false),
                        Name = c.String(nullable: false, maxLength: 25),
                    })
                .PrimaryKey(t => t.Id);
            
            AddColumn("dbo.Movies", "GenreId", c => c.Byte(nullable: false));
            AddColumn("dbo.Movies", "DateAdded", c => c.DateTime(nullable: false));
            AddColumn("dbo.Movies", "ReleaseDate", c => c.DateTime(nullable: false));
            AddColumn("dbo.Movies", "NumberInStock", c => c.Byte(nullable: false));
            CreateIndex("dbo.Movies", "GenreId");
            AddForeignKey("dbo.Movies", "GenreId", "dbo.Genres", "Id", cascadeDelete: true);
        }
        
        public override void Down()
        {
            DropForeignKey("dbo.Movies", "GenreId", "dbo.Genres");
            DropIndex("dbo.Movies", new[] { "GenreId" });
            DropColumn("dbo.Movies", "NumberInStock");
            DropColumn("dbo.Movies", "ReleaseDate");
            DropColumn("dbo.Movies", "DateAdded");
            DropColumn("dbo.Movies", "GenreId");
            DropTable("dbo.Genres");
        }
    }
}

我收到此错误:

ALTER TABLE 语句与 FOREIGN KEY 约束“FK_dbo.Movies_dbo.Genres_GenreId”冲突。 冲突发生在数据库“as.net-web_template_001-20230102051540”、表“dbo.Genres”、“Id”列中。

这是 git 回购: https://github.com/joshuamitchum89/web_template_001

我该如何解决这个问题?

谢谢你抽出时间来帮助我。

我试图删除迁移并进行新的迁移。 还重启VS没完没了。 我已经将这种方法用于其他模型和类,以通过外键链接表。

您需要将[Key]属性添加到两种类型的 Id 属性。 见下文。

另外,你在Gene上的关键是一个byte ,不确定这是意外还是故意的,但似乎是前者。

 [Key] //fix on both classes
 public int Id { get; set; } 

 //optional if you want to be able to access key
 public int Gene_Id { get; set; }

 [ForeignKey(nameof(Gene_Id))]
 public Genre Genre { get; set; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM