Эффективный способ сохранения родительско-дочерних таблиц в MVC Entity Framework - PullRequest
0 голосов
/ 04 октября 2011

Я пробую MVC с Entity Framework и пытаюсь понять, как лучше использовать EF.

У меня есть страница, на которой можно сохранить информацию об ученике и информацию об отце / матери.Мой текущий код работает, как показано ниже, но я чувствую, что я делаю это неправильно.Есть ли лучший способ для меня это сделать?Нужно ли дважды вызывать SaveChanges ()?

БД имеет следующую структуру; Person PersonID INT PK FirstName Varchar (50)

Student Student_PersonID INT FK Father_PersonID INT FK Mother_PersonID INT FK

Учащийся, отец и мать являютсявсе FK к таблице персон.

На странице просмотра регистрации есть текстовые поля для 3 персон:

@Html.EditorFor(s => s.Person.FirstName)    @*student name*@
@Html.EditorFor(f => f.Father.FirstName)    @*father name*@
@Html.EditorFor(f => f.Mother.FirstName)    @*mother name*@

Код контроллера выглядит следующим образом:

[HttpPost]
public ActionResult Register(Student sm)
{
        using (var db = new SMEntities())
    {
        db.People.Add(sm.Person);
                db.People.Add(sm.Mother);
                db.People.Add(sm.Father);

                db.SaveChanges(); //save the 3 persons

                int studentId = sm.Person.PersonID;
                int motherId = sm.Mother.PersonID;
                int FatherId = sm.Father.PersonID;

                Student s = new Student();
                s.Student_PersonID = studentId;
                s.Father_PersonID = FatherId;
                s.Mother_PersonID = motherId;

        db.Students.Add(s);
                db.SaveChanges();
    }
}

Яиспользуя VS2010, MVC 3, и это было смоделировано после первой концепции базы данных.

1 Ответ

2 голосов
/ 05 октября 2011

Вы можете фактически заменить свой код на:

[HttpPost]
public ActionResult Register(Student sm)
{
    using (var db = new SMEntities())
    {
        db.Students.Add(sm);
        db.SaveChanges();
    }
}

Причина, по которой это работает, заключается в том, что EF добавит все связанные сущности в контекст (которые не привязаны к контексту), когда вы добавляете Student.Таким образом, этот код будет вставлять Student, Person, Father и Mother в базу данных и должен делать то же самое, что и ваш код.

...