Как внести изменения в запрос, сохраненный в базе данных? - PullRequest
0 голосов
/ 24 февраля 2019

Я использую:

  • Entity Framework v6.2.0
  • SQL Server 2012

У меня есть эти таблицы:
- tbl_979F301_Groups
- tbl_979F302_Students
- tbl_979F303_GroupsStud (FK - tbl_979F301_Groups)

Запрос:

  • vw_979F3_GudStud;
    enter image description here

Сценарий:

  • Пользователь находится на клиенте SQL Server 2012
  • Пользователь вносит изменения в запрос vw_979F3_GroupsStud_Stud;
  • Изменения отображаются в таблицах, используемых в запросе

enter image description here

enter image description here

Если я внесу изменения в приложение, использующее таблицы через Entity Framework, то получу ошибку:

Ошибкаобновить набор EntitySet vw_979F3_GroupsStud_Stud, поскольку он имеет запрос DefiningQuery и отсутствует элемент <UpdateFunction> в элементе <ModificationFunctionMapping> для поддержки текущих операций

enter image description here

Вопрос: как сохранить изменения в базе данных, внесенные в приложение в запросе?

Структура таблицы:

CREATE TABLE "tbl_979F301_Groups" 
(
    "id_group" BIGINT NOT NULL,
    "nameGroup" NVARCHAR(255) NULL DEFAULT NULL,
    "Property_1_Group" NVARCHAR(255) NULL DEFAULT NULL,
    "Property_2_Group" NVARCHAR(255) NULL DEFAULT NULL,
    "Property_3_Group" NVARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY ("id_group")
)

CREATE TABLE "tbl_979F302_Students"  
(
    "id_stud" BIGINT NOT NULL,
    "NameStud" NVARCHAR(255) NULL DEFAULT NULL,
    "Property_1" NVARCHAR(255) NULL DEFAULT NULL,
    "Property_2" NVARCHAR(255) NULL DEFAULT NULL,
    "Property_3" NVARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY ("id_stud")
)

CREATE TABLE "tbl_979F303_GroupsStud" 
(
    "id_groupStud" BIGINT NOT NULL,
    "id_group" BIGINT NULL DEFAULT NULL,
    "id_stud" BIGINT NULL DEFAULT NULL,
    "groupStud_descript" NVARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY ("id_groupStud")
); 

Просмотрvw_979F3_GroupsStud_Stud:

SELECT tbl_979F303_GroupsStud.*, tbl_979F302_Students.NameStud
FROM tbl_979F303_GroupsStud
INNER JOIN tbl_979F302_Students ON tbl_979F303_GroupsStud.id_stud = tbl_979F302_Students.id_stud;

Мой код.

 ContextDBF3 cntDBF3;
 int id_group_cur;

 public Frm3UC()
 {
     InitializeComponent();

     cntDBF3 = new ContextDBF3();
 }

 private void Frm3UC_Load(object sender, EventArgs e)
 {
     FillGrid_1();
 }

 private void dataGridView1_SelectionChanged(object sender, EventArgs e)
 {
     DataGridViewRow selectedRow = dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex];

     textBox1.Text = selectedRow.Cells[0].Value.ToString();
     id_group_cur = Convert.ToInt32(selectedRow.Cells[0].Value);

     FillGrid_2();
 }

 public void FillGrid_1()
 {
     try
     {
         cntDBF3.tbl_979F301_Groups.Load();

         bs_Grid_1.DataSource = cntDBF3.tbl_979F301_Groups.Local.ToBindingList();

         dataGridView1.DataSource = bs_Grid_1;
     }
     catch (Exception ex)
     {
         string s = ex.Message;
         string t = ex.StackTrace;
         // throw;
         MessageBox.Show(s);
     }
 }

 public void FillGrid_2()
 {
     try
     {
         IQueryable<vw_979F3_GroupsStud_Stud> query = cntDBF3.vw_979F3_GroupsStud_Stud
               // .Select(x => x)
                                                             .Where(x => x.id_group == id_group_cur);

         bs_Grid_2.DataSource = query.ToList();
         dataGridView2.DataSource = bs_Grid_2;
     }
     catch (Exception ex)
     {
         string s = ex.Message;
         string t = ex.StackTrace;
         // throw;
         MessageBox.Show(s);
     }
 }

 public void SaveContext()
 {
     try
     {
         cntDBF3.SaveChanges();
     }
     catch (Exception ex)
     {
         string s = ex.Message;
         string t = ex.StackTrace;
         // throw;
         MessageBox.Show(s);
     }
 }
...