0

J'utilise le Microsoft.AspNet.EntityDataSource comme ceci:Microsoft.AspNet.EntityDataSource donne la valeur de la propriété de mauvaise entité au cours de la mise à jour ou suppression

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> 

Il crée une table avec des enregistrements (entités) tapez awCategoryGroup. Le problème est, quand je veux supprimer l'enregistrement en utilisant le bouton de suppression de GridView CommandField qui appelle la méthode 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; 
} 

La base de données ressemble à ceci lors de la sélection des données pour GridView.

DB:

ID Name Code isValid 
========================================== 
19 Roles UserRole True 
20 Actions ActionType True 

L'objectif devrait être de fixer isValid colonne False. Mais lorsque la méthode eds_Deleting est appelée, le (awCategoryGroup)e.Entity contient les valeurs correspondantes de ses propriétés, à l'exception de la propriété bool (en DB sous la forme bit), valeur isValid. Il devrait être True, mais il est déjà False avant de le définir. Aucune sauvegarde ne se produit lors de l'appel e.Context.SaveChanges();, car les propriétés ne sont pas modifiées.

Est-ce un bug ou est-ce que je fais quelque chose de mal? Cette philosophie a bien fonctionné sur EF4, mais après la migration vers EF6, il y a le problème.

Répondre

0

Il semble que isValid doit être l'une des colonnes visibles dans le GridView.

Donc exactement eds_Deleting ne fonctionne pas avec l'entité de la base de données mais seulement avec sa partie utilisée dans GridView. Les valeurs non utilisées dans GridView sont de valeur par défaut (généralement null ou false). Il s'agit donc entre autres de la différence entre EF5 EntityDataSource et EF6 EntityDataSource. EF5 version a travaillé avec l'objet entièrement chargé, mais pas EF6.