![](/img/trans.png)
[英]Error When running Update-Database using Entity Framework, Code First (POCO) and Code Contracts
[英]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.