【发布时间】:2016-11-02 22:22:02
【问题描述】:
我正在像这样使用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>
它创建一个包含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 后,问题就出现了。
【问题讨论】:
标签: c# asp.net entity-framework-6 asp.net-4.5 entitydatasource