Как инициализировать новый объект, который имеет отношение один к одному с другим объектом, а затем добавить этот новый объект в базу данных? - PullRequest
0 голосов
/ 21 февраля 2012

Я только начинаю знакомиться с Entity Framework 4, но есть еще несколько вещей, с которыми я борюсь, эта проблема является последней, и мне было интересно, если кто-то будет так любезен, чтобы указать мне в правильное направление?

У меня есть несколько довольно простых сущностей в моей модели, но одна из них имеет отношение один к одному, определенное для другой сущности, и я не могу найти правильную последовательность событий для добавления нового экземпляра этого объект в базу данных успешно.

Упрощенный пример

У меня есть Студенческая организация, Национальная организация и Студент имеет индивидуальное отношение к национальности

Я создаю новую студенческую сущность для добавления в базу данных и Я не могу упорствовать без предварительной установки национальности, чтобы удовлетворить отношения один-к-одному.

Я имею национальность "Неизвестно" в качестве одной из моих национальностей в базе данных, и я хочу, чтобы это было начальным значением для моей новой студенческой записи.

Как мне создать нового студента, создать исходную ссылку на национальную сущность "Неизвестно", а затем добавить новую запись студента в базу данных таким образом, чтобы все происходило в правильном порядке?

Я просто использую стандартные классы, сгенерированные вместе с моделью, я взглянул на типы STE и POCO, но я решил сделать шаг назад и сначала изучить основы.

1 Ответ

0 голосов
/ 21 февраля 2012

не знаю, какой "вкус" EF вы используете.Вот как это сделать с помощью EF Code First: Сначала ваши сущности:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Nationality Nationality { get; set; }
}

public class Nationality
{
    public int Id { get; set; }
    public string Name { get; set; }        
}

В этом случае отношения довольно просты, и вам не нужно EntityTypeConfiguration .Вы можете добавить свои записи в следующем порядке:

var nationalities = new List<Nationality>(){new Nationality(){Name ="Italian"},
                                                        new Nationality(){Name ="British"}, 
                                                        new Nationality(){Name ="American"}};

nationalities.ForEach(x => context.Nationality.Add(x));
context.SaveChanges();

//retrieve the nationality from the context
var italianNationality = context.Nationality.Where(x => x.Name == "Italian").First();
//create the student and assign a nationality
var student = new Student() { Name = "Giorgio", Nationality = italianNationality };
context.Students.Add(student);
context.SaveChanges();

Вот ваша структура таблиц (С таблицей ученика, содержащей FK для национальности)

enter image description here

ИВот результаты вставки:

enter image description here

Более подробная информация о коде сначала здесь: http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx А здесь: http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...