我正在使用ef代码优先迁移创建一个类似于c#/.net4.5框架的博客。
事情一直进展顺利,直到在我的主课上增加了第三段恋情。
我有一个“story”类(有点像博客的“post”),其中我有一个作者作为登录的用户(设置在控制器中)、一个标题、一些内容、创建日期,以及一个故事的类型和类型。
public class Story
{
public int Id { get; set; }
public string AuthorId { get; set; }
public virtual ApplicationUser Author { get; set; }
[Required]
[StringLength(50)]
public string Title { get; set; }
[Required]
[MinLength(100), MaxLength(5000)]
public string Content { get; set; }
[Required]
public int GenreId { get; set; }
public Genre Genre { get; set; }
[Required]
public int StoryTypeId { get; set; }
public StoryType StoryType { get; set; }
public DateTime CreatedAt { get; set; }
}
我将故事类型作为属性添加到故事中。storytype链接到storytype模型:
public class StoryType
{
public int Id { get; set; }
public string Name { get; set; }
}
我确保将我的数据库集添加到我的应用程序数据库上下文:
public DbSet<Genre> Genres { get; set; }
public DbSet<Story> Stories { get; set; }
public DbSet<StoryType> StoryTypes { get; set; }
我几乎遵循了我用来建立故事和类型之间关系的相同步骤(效果很好)。在开始构建storytype控制器之前,我进入package console并运行:
add-migration
结果是:
public partial class CreateTypeTable : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.StoryTypes",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
})
.PrimaryKey(t => t.Id);
AddColumn("dbo.Stories", "StoryTypeId", c => c.Int(nullable: false));
CreateIndex("dbo.Stories", "StoryTypeId");
AddForeignKey("dbo.Stories", "StoryTypeId", "dbo.StoryTypes", "Id", cascadeDelete: true);
}
public override void Down()
{
DropForeignKey("dbo.Stories", "StoryTypeId", "dbo.StoryTypes");
DropIndex("dbo.Stories", new[] { "StoryTypeId" });
DropColumn("dbo.Stories", "StoryTypeId");
DropTable("dbo.StoryTypes");
}
}
我看了一眼,没发现问题,就跑:
update-database
包内控制台。
结果是:
Error Number:547,State:0,Class:16
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_dbo.Stories_dbo.StoryTypes_StoryTypeId". The conflict occurred in database "aspnet-HiRatik.Stories-20180724043630", table "dbo.StoryTypes", column 'Id'.
我不确定这里出了什么问题。我对流派关系也做了同样的处理,结果成功了。我看不出两者有什么不同。
1条答案
按热度按时间z2acfund1#
因为类story中的storytypeid不接受null,所以需要使storytypeid可为null:
或者,首先创建表storytype并向其中添加元素,然后添加具有默认值的storytypeid:
公共类故事{public int id{get;集合;}
在这种情况下,您必须在创建storytype之后更新数据库,并在将storytypeid添加到类story之后更新数据库