无法使用代码优先方法向具有关系的数据播种数据库

时间:2019-03-15 12:04:40

标签: c# sql entity-framework

该数据库具有两个表Coach和CoachType(请参见下文)。可以先使用代码(添加-迁移,然后更新数据库)来创建这两个表。

public class Coach
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }

        [ForeignKey("FK_CoachType_Id")]
        public int CoachTypeId { get; set; }

        public virtual CoachType coachtype { get; set; }
    }

public class CoachType
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id{ get; set; }
        public string Name { get; set; }
    }

但是当我尝试使用一些默认数据来播种数据时,它会显示错误消息:

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_coaches_coachtypes_CoachTypeId". The conflict occurred in database "MyDatabase", table "dbo.CoachType", column 'Id'.
The statement has been terminated.

这是我的代码,其中包含用于填充表格的数据:

        modelBuilder.Entity<CoachType>().HasData(new CoachType
        {
            CoachTypeId = 1,
            Name = "Name"
        });

        modelBuilder.Entity<Coach>().HasData(new Coach
        {
            Id = 1,
            Name = "Name",
            CoachTypeId = 1
        });`enter code here`

我查看了Google并尝试了一些方法,但我不断收到该消息。

1 个答案:

答案 0 :(得分:0)

Id表的CoachType列是自动生成的,因此无论您分配给其Id的值是什么,它都会被忽略,因此,在插入CoachType时,插入的记录Id不会是1的机会。因此,当尝试插入Coach等于CoachTypeId的{​​{1}}时,会引发外键冲突错误。
一种可能的解决方案是使1的{​​{1}}列不相同。
另外,我不知道您为什么写Id而不是CoachType