Я использую:
- Entity Framework v6.2.0
- SQL Server 2012
У меня есть эти таблицы:
- tbl_979F301_Groups
- tbl_979F302_Students
- tbl_979F303_GroupsStud (FK - tbl_979F301_Groups)
Запрос:
- vw_979F3_GudStud;
Сценарий:
- Пользователь находится на клиенте SQL Server 2012
- Пользователь вносит изменения в запрос
vw_979F3_GroupsStud_Stud;
- Изменения отображаются в таблицах, используемых в запросе
Если я внесу изменения в приложение, использующее таблицы через Entity Framework, то получу ошибку:
Ошибкаобновить набор EntitySet vw_979F3_GroupsStud_Stud
, поскольку он имеет запрос DefiningQuery и отсутствует элемент <UpdateFunction>
в элементе <ModificationFunctionMapping>
для поддержки текущих операций
Вопрос: как сохранить изменения в базе данных, внесенные в приложение в запросе?
Структура таблицы:
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);
}
}