Когда я удаляю строку из таблицы detail
, удаляется только значение внешнего ключа - id_group
в таблице хранения (SQL Server), а сама строка остается в таблице.
Я использую:
- SQL Server;
- Entity Framework;
- Девэкспресс;
- WinForms;
- gridControl
Я подключился к базе данных с помощью Entity Framework.Создан источник данных.
Перетащите в источник данных таблицы форм:
![enter image description here](https://i.stack.imgur.com/7W63J.png)
bindingSource
(bs_tbl_01_Groups
) GridControlтаблицы Master
заполняется методом.
cntDB.tbl_01_Groups.Load();
bs_tbl_01_Groups.DataSource = cntDB.tbl_01_Groups.Local.ToBindingList();
bindingSource
(bs_tbl03GroupsStud
) GridControl таблицы Detail
заполняется автоматически.
Заполнение bindingSource
(bs_tbl03GroupsStud
) GridControl таблицы Detail
.
![enter image description here](https://i.stack.imgur.com/Ysqge.png)
Я хочу удалить строку в таблице detail
.
Я пробую методы:
- gridView2.DeleteSelectedRows ();
;
или
- gridView2.DeleteRow (gridView2.FocusedRowHandle);
;
Логика:
- Пользователь.Выбирает строку;
- Пользователь.Нажмите кнопку Удалить;
Рабочий код - gridView2.DeleteSelectedRows();
- Строка в базе данных не удалена;
- Пользователь.Нажмите кнопку Save
;
Код выполняется - cntDB.SaveChanges ();
- В базе данных в строке удаляется только значение FK
;
Результат:
- методы удаляют только значение внешнего ключа id_group
в таблице хранения (MS SQL), а сама строка остается в таблице;
- строка удаляется только из gridView
(gridControl
) (это происходит из-за отсутствия значения внешнего ключа из связанной строки);
![enter image description here](https://i.stack.imgur.com/na1Jy.png)
Вопрос: Как убедиться, что при удалении строки из detail
таблица, строка удаляется из таблицы хранения (SQL Server)?
Добавление:
У меня возникла проблема: в GridControl (detail
) вместо таблицы отображались столбцы «Количество» и «Только для чтения». Ссылка
Решение: использовал класс ObservableListSource.cs
. Ссылка
Код приложения:
ContextDB cntDB;
private void Form1_Load(object sender, EventArgs e)
{
cntDB = new ContextDB();
FillGrid();
}
public void FillGrid()
{
cntDB.tbl_01_Groups.Load();
bs_tbl_01_Groups.DataSource = cntDB.tbl_01_Groups.Local.ToBindingList();
}
public void RemoveRow_gridView_2()
{
gridView2.DeleteSelectedRows();
}
public void Save()
{
cntDB.SaveChanges();
}
Код SQL таблиц Master
.
CREATE TABLE [dbo].[tbl_01_Groups] (
[id_group] int IDENTITY(1,1) NOT NULL,
[nameGroup] nvarchar(255) COLLATE Cyrillic_General_CI_AS NULL,
[Property_1_Group] nvarchar(255) COLLATE Cyrillic_General_CI_AS NULL,
[Property_2_Group] nvarchar(255) COLLATE Cyrillic_General_CI_AS NULL,
[Property_3_Group] nvarchar(255) COLLATE Cyrillic_General_CI_AS NULL,
CONSTRAINT [PK_tbl_01_Groups] PRIMARY KEY NONCLUSTERED ([id_group])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = OFF, ALLOW_PAGE_LOCKS = OFF)
ON [PRIMARY]
)
ON [PRIMARY]
GO
ALTER TABLE [dbo].[tbl_01_Groups] SET (LOCK_ESCALATION = TABLE)
Код SQL для таблиц detail
.
CREATE TABLE [dbo].[tbl_03_GroupsStud] (
[id_groupStud] int IDENTITY(1,1) NOT NULL,
[id_group] int NULL,
[id_stud] int NULL,
[groupStud_descript] nvarchar(255) COLLATE Cyrillic_General_CI_AS NULL,
CONSTRAINT [PK_tbl_03_GroupsStud] PRIMARY KEY NONCLUSTERED ([id_groupStud])
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = OFF, ALLOW_PAGE_LOCKS = OFF)
ON [PRIMARY],
CONSTRAINT [FK_id_grp] FOREIGN KEY ([id_group]) REFERENCES [dbo].[tbl_01_Groups] ([id_group]) ON DELETE NO ACTION ON UPDATE NO ACTION
)
ON [PRIMARY]
GO
ALTER TABLE [dbo].[tbl_03_GroupsStud] SET (LOCK_ESCALATION = TABLE)
Код entity framework
таблицы Master
.
public partial class tbl_01_Groups
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public tbl_01_Groups()
{
this.tbl_03_GroupsStud = new ObservableListSource<tbl_03_GroupsStud>();
}
public int id_group { get; set; }
public string nameGroup { get; set; }
public string Property_1_Group { get; set; }
public string Property_2_Group { get; set; }
public string Property_3_Group { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ObservableListSource<tbl_03_GroupsStud> tbl_03_GroupsStud { get; set; }
}
Код entity framework
таблицы detail
.
public partial class tbl_03_GroupsStud
{
public int id_groupStud { get; set; }
public Nullable<int> id_group { get; set; }
public Nullable<int> id_stud { get; set; }
public string groupStud_descript { get; set; }
public virtual tbl_01_Groups tbl_01_Groups { get; set; }
}
Update_1
SaveChanges ()
метод
![enter image description here](https://i.stack.imgur.com/0U82m.png)