2016-11-02 10 views
0

Я использую 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 возникла проблема.

ответ

0

Похоже isValid должен быть как одна из видимых колонок в GridView.

Так что eds_Deleting точно не работает с сущностью из базы данных, а только с ее частью, используемой в GridView. Значения, не используемые в GridView, имеют значение по умолчанию (обычно null или false).

Так что это, inter alia, разница между EF5 EntityDataSource и EF6 EntityDataSource. Версия EF5 работала с полностью загруженным объектом, но EF6 - нет.