EF Сохранение экземпляров по неправильному порядку - PullRequest
1 голос
/ 04 июля 2019

У меня есть следующие примеры классов:

public class A {
    public Guid Id { get; set; }
    public B B { get; set; }
}

public class B {
    public Guid Id { get; set; }
    public string SomeProperty { get; set; }
}

public class AConfiguration : EntityTypeConfiguration<A> {
    public AConfigurations() {
         HasOptional(x=> x.B)
             .WithRequired();
    }
}

Когда я добавляю новый экземпляр A и B, как показано ниже:

var a = new A() {
    B = new B() {
        SomeProperty = "Some Value"
    }
};
context.As.Add(a);
context.SaveChanges();

С учетом этой модели, миграциясоздает таблицу для A с PK Guid, а таблицу для B. B имеет PK, помеченный как FK для A, что соответствует моим потребностям.

Проблема в том, что при нажатии SaveChanges EF пытается вставить B перед вставкой A, что создает исключение FK для базы данных.

Я что-то упустил или это ошибка в EF 6

1 Ответ

0 голосов
/ 04 июля 2019

Если вы используете EF Code First (хорошо, по крайней мере, вы используете Fluent api), вы могли бы сначала добавить атрибут, показанный ниже, к вашим первичным ключам:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }

Вы используете здесь инициализаторы объектов, но не устанавливаете Id для определенного значения Guid. Например, они могут отправить в базу данных значение Guid.Empty.

Сохранение графа объектов для сценария добавления его в базу данных поддерживается в EF, вы можете изучить этот пример. Обратите внимание, что идентификаторы здесь - целые числа, а не направляющие

Пример кода EF Сохранение связанных данных

Итак, сначала я бы попытался добавить опцию DatabaseGenerated к вашим идентификаторам, которую также можно настроить с помощью Fluent API.

...