Добавление записей в доп. таблицу, имеющей связь с основной таблицей?
Привет всем. Пишу проект посредством asp.net mvc.
1. Мною реализована связь между гл.таблицей и доп. таблицей.
2. Таблица People. Столбцы: id, фио.
3. Таблица Treatment. Столбцы: id_chelovek, data, prichina_obraschenia, otmetka o vipolnenii.
3. Создана связь между id и id_chelovek. Для того чтобы к одному человеку цеплялись записи таблицы Treatment.
5. Добавил контроллер People, представление. Далее создал частичное предложение Treatment и встроил оное в представление People.
4. Проблема в том, что при проверке добавления записей - добавляет только id, фио. А запись в таблицу Treatment по этому же человеку не добавляется. А нужно чтобы я добавляя сведения по человеку мог в одном и том же представлении заодно добавить и несколько treatment на одного и того же человека.
Теперь вопросы:
1. В чем проблема? Почему не добавляется?
2. Как в приложении asp.net это реализовать средствами c#?
Спасибо за внимание.
{
using System;
using System.Collections.Generic;
public partial class treatment
{
public int id_chelovek { get; set; }
public Nullable<System.DateTime> date_of_appeal { get; set; }
public string cause_of_appeal { get; set; }
public string otmetka_o_vipolnenii { get; set; }
public virtual person person { get; set; }
}
}
namespace tson10.Models
{
using System;
using System.Collections.Generic;
public partial class person
{
public int id { get; set; }
public string family { get; set; }
public string name { get; set; }
public string patronymic { get; set; }
public Nullable<System.DateTime> date_of_birth { get; set; }
public string telephone { get; set; }
public Nullable<int> id_category { get; set; }
public Nullable<int> id_disability { get; set; }
public Nullable<int> id_city { get; set; }
public Nullable<int> id_street { get; set; }
public string dom { get; set; }
public string kvartira { get; set; }
public Nullable<int> id_firing { get; set; }
public Nullable<int> id_status { get; set; }
public virtual category category { get; set; }
public virtual child child { get; set; }
public virtual city city { get; set; }
public virtual disability disability { get; set; }
public virtual firing firing { get; set; }
public virtual status status { get; set; }
public virtual street street { get; set; }
public virtual treatment treatment { get; set; }
}
}
reboot777, я могу лишь догадываться о том, как у вас организован код и почему оно не работает сейчас (= Если DbContext аж до контроллера протянут, то скорее всего там нужно передать все в том стиле, что я показал - как граф объектов.
По-хорошему, работа с базой делается в т.н. "слое доступа к данным" (aka Data Access Layer, DAL), валидация и прочая бизнес-логика - в сервесном слое, а в контроллерах - UI-логика, обработка ошибок запроса, вызов нужных сервисов и маппинг моделей в сущности и обратно. О построении грамотной архитектуры расскажет книжка, о которой я писал.
reboot777, с фронта вам приходит некая view-модель (model), на основе которой вы создаете сущность, которую уже сохраняете в БД. Она может быть того же типа, это не особо важно. В моем примере в ответе я обращал внимание на то, что зависимый объект должен находиться внутри главного (связанный ссылками), таким образом когда EF распарсит дерево объектов, он поймет, что между ними есть отношение. Тогда они оба сохранятся одним махом.
var newPerson = new People {
//Id = model.Id,
Name = model.Name,
Treatment = new Treatment {
//...
},
};
dbCcontext.People.Add(newPerson);
dbCcontext.SaveChanges();
Толстый Лорри, извините, вопрос не по теме. Но может быть ещё подскажете книги по этой теме? Для меня важно все досконально разобрать и отточить понимание.
Спасибо за ответ на вопросы выше. Вы мне очень помогли.
reboot777, Пожалуйста.
Есть каноничная книжка Адама Фримана по ASP.NET MVC, помимо изучения самого фреймворка на примерах (разработка простенького интернет-магазина) автор уделяет достаточно много времени трехслойной архитектуре (DAL на репозиториях, сервисный слой (бизнес-логика), интерфейсная логика), основы внедрения зависимостей (IoC via DI), написанию юнит-тестов. Пусть не пугает то, что это про ASP.NET MVC 4, большая часть материала актуальна и для Core, не говоря уже об обратной совместимости базового фреймворка.