插入具有一对零或一对关系的对象时出错

时间:2019-02-17 07:00:26

标签: c# entity-framework insert ef-code-first entity-relationship

考虑课程是否可以具有课程。因此,课程与课程之间的关系是1..0或1..1。 这些类是:

public class Course
{
    public int Id {get; set;}
    public Curriculum { get; set; }
}


public class Curriculum 
{ 
    [ForeignKey("Course")]
    public int Id { get; set; }     

    public Course Course { get; set; }     
}

我通过流利的api来配置关系,如下所示:

public class CourseConfiguration : EntityTypeConfiguration<Course>
{
    public CourseConfiguration()
    {
        HasOptional(course => course.Curriculum)
            .WithRequired(cur => cur.Course);
    }
}

不幸的是,当我想在Db中保存课程时,会出现此错误:

  

当IDENTITY_INSERT设置为OFF时,无法为表“课程”中的标识列插入显式值

此外,我向课程类的主键添加了属性[DatabaseGenerated(DatabaseGeneratedOption.Identity)][DatabaseGenerated(DatabaseGeneratedOption.None)],但它没有任何作用或产生了新的异常!

你有什么主意吗?

1 个答案:

答案 0 :(得分:0)

我接受了您的代码,它起作用了:

> public class MyContext : DbContext
>     {
>         public DbSet<Curriculum> Curriculum { get; set; }
>         public DbSet<Course> Course { get; set; }
> 
>         protected override void OnModelCreating(DbModelBuilder modelBuilder)
>         {
>             base.OnModelCreating(modelBuilder);
>             modelBuilder.Configurations.Add(new CourseConfiguration());
>         }
>     }
>     public class Course
>     {
>         [DatabaseGenerated(DatabaseGeneratedOption.None)]
>         public int Id { get; set; }
>         public Curriculum Curriculum { get; set; }
>     }
> 
>     public class CourseConfiguration : EntityTypeConfiguration<Course>
>     {
>         public CourseConfiguration()
>         {
>             HasOptional(course => course.Curriculum)
>                 .WithRequired(cur => cur.Course);
>         }
>     }
>     public class Curriculum
>     {
>         [ForeignKey("Course")]
>         public int Id { get; set; }
> 
>         public Course Course { get; set; }
>     }

但是,在您的情况下,由于该表最初是在标识设置为true的情况下创建的,因此EF不会为您更改它。如果您在第一次迁移时在Course的Id属性上具有以下属性,则不会发生此问题:

  

[DatabaseGenerated(DatabaseGeneratedOption.None)]

为了解决您的问题,您需要重新创建表Course。 以下链接也可以为您提供帮助: https://stackoverflow.com/a/18917348/2348125