【问题标题】:Microsoft.AspNet.EntityDataSource gives wrong entity's property value during Updating or DeletingMicrosoft.AspNet.EntityDataSource 在更新或删除期间提供错误的实体属性值
【发布时间】: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


    【解决方案1】:

    看起来 isValid 必须是 GridView 中的可见列之一

    所以eds_Deleting 完全不能与数据库中的实体一起使用,而只能与GridView 中使用的部分一起使用。 GridView 中未使用的值是默认值(通常是 nullfalse)。

    这就是EF5 EntityDataSourceEF6 EntityDataSource 之间的区别。 EF5 版本适用于完全加载的对象,但 EF6 不适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-03
      • 2019-02-15
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多