Ошибка при вставке объекта с отношением один к нулю или один - PullRequest
0 голосов
/ 17 февраля 2019

Рассмотрим Курс может иметь Учебный план или нет.Таким образом, отношение между Курсом и Учебным планом составляет 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);
    }
}

к сожалению, когда я хочу сохранить курс в БД, возникает эта ошибка:

Невозможно вставить явное значение для столбца идентификаторов в таблице «Учебные планы», если для параметра IDENTITY_INSERT установлено значение OFF

Кроме того, я добавил атрибуты [DatabaseGenerated(DatabaseGeneratedOption.Identity)] или [DatabaseGenerated(DatabaseGeneratedOption.None)] в основнойключ класса Curriculum, но он не действует или создает новое исключение!

Есть идеи?

1 Ответ

0 голосов
/ 17 февраля 2019

Я взял ваш код, и он сработал:

> 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 не изменит его для вас.Если бы у вас был следующий атрибут в свойстве Id свойства Course при первой миграции, проблема не возникла бы:

[DatabaseGenerated (DatabaseGeneratedOption.None)]

Для того, чтобы решить вашу проблему, вам необходимо воссоздать таблицу Course.Следующая ссылка также может вам помочь: https://stackoverflow.com/a/18917348/2348125

...