Я использую Microsoft.AspNet.EntityDataSource
так:Microsoft.AspNet.EntityDataSource дает значение свойства неверного субъекта во время обновления или удалений
ASPX:
<asp:GridView runat="server" DataSourceID="eds" ID="gv" AutoGenerateColumns="false" DataKeyNames="ID">
<Columns>
<asp:BoundField DataField="ID" HeaderText="#" ReadOnly="true" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:BoundField DataField="Code" HeaderText="Code" ReadOnly="true" />
<asp:CommandField ButtonType="Button" ShowEditButton="true" ShowDeleteButton="true" />
</Columns>
</asp:GridView>
<ef:EntityDataSource runat="server" ID="eds" ConnectionString="name=Entities"
EnableDelete="true" EnableInsert="True" EnableUpdate="True"
EntitySetName="awCategoryGroups" DefaultContainerName="Entities" EnableFlattening="False"
Where="it.isValid=true" OrderBy="it.Name asc" OnDeleting="eds_Deleting">
</ef:EntityDataSource>
Это создает таблицу с записями (лицами) type awCategoryGroup
. Проблема в том, когда я хочу удалить запись с помощью кнопки удаления с GridView CommandField
, которая вызывает метод eds_Deleting
.
C#:
protected void eds_Deleting(object sender, Microsoft.AspNet.EntityDataSource.EntityDataSourceChangingEventArgs e)
{
awCategoryGroup cg = (awCategoryGroup)e.Entity;
cg.isValid = false;
e.Context.SaveChanges();
e.Cancel = true;
}
База данных выглядит следующим образом при выборе данных для GridView
.
БД:
ID Name Code isValid
==========================================
19 Roles UserRole True
20 Actions ActionType True
Цель должна установить isValid
столбец False
. Но когда вызывается метод eds_Deleting
, (awCategoryGroup)e.Entity
содержит соответствующие значения его свойств, кроме bool
(в DB как bit
), оцененное имущество isValid
. Это должно быть True
, но это False
уже до того, как я его установил. Таким образом, при вызове e.Context.SaveChanges();
не сохраняется сохранение, поскольку свойства не изменяются.
Это ошибка или я что-то не так? Эта философия отлично работала на EF4, но после перехода на EF6 возникла проблема.