1

ASP.NET/C#/nHibernate アーキテクチャの使用 - がありGridViewObjectDataSourcedelete メソッドが機能しない問題があります。

サービス層で宣言された関数を単純に使用するとRemove(T entity)(nHibernate リポジトリを呼び出します)、GridView_RowDeleting()メソッドが呼び出され、続いてObjectDataSource_Deleting()が呼び出され、サービス層の関数が呼び出され、ビジネス オブジェクトが適切に削除されます。

ただし、RemoveByID(int ID)関数を使用しようとすると、メソッドGridView_RowDeleting()ObjectDataSource_Deleting()メソッドが呼び出された後、サービス層が呼び出されません。

これは と関係があると思いますがObjectDataSource.DeleteParameters、正しく理解できないようです。

以下は、GridView と ObjectDataSource のコード スニペットです。ご覧のとおり、GridView のリストにビジネス オブジェクトの主キーがpkChapter7IDリストされています。DataKeyNames

  <asp:GridView ID="gvChapter7" runat="server" DataSourceID="odsChapter7" DataKeyNames="pkChapter7ID">
    <Columns>
      <asp:BoundField DataField="pkChapter7ID" HeaderText="pkChapter7ID" SortExpression="pkChapter7ID"/>
      ...
    </Columns>
  </asp:GridView>

  <asp:ObjectDataSource ID="odsChapter7" runat="server"
    DeleteMethod="RemoveByID" OldValuesParameterFormatString="original_{0}"
    SelectMethod="FindAllForProjectID" TypeName="CLS.Services.Chapter7Service">
    <DeleteParameters>
      <asp:Parameter Name="ID" Type="Int32" />
    </DeleteParameters>
    <SelectParameters>
      <asp:SessionParameter Name="ID" SessionField="ProjectID" Type="Int32" />
    </SelectParameters>
  </asp:ObjectDataSource>

そして、私の一般的なサービス層の関連部分 (nHibernate リポジトリを呼び出します。そこに到達すると正常に動作します):

    [DataObjectMethod(DataObjectMethodType.Delete, false)]
    public virtual void Remove(T entity)
    {
        _repository.Remove(entity);
    }

    [DataObjectMethod(DataObjectMethodType.Delete, true)]
    public virtual void RemoveByID(int ID)
    {
        T entity = FindBy(ID);
        if (entity != null)
            _repository.Remove(entity);
    }

DeleteParameters_RowDeleting メソッドで設定しようとしました:

protected void gvChapter7_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    odsChapter7.DeleteParameters["ID"].DefaultValue = e.Keys["pkChapter7ID"].ToString();
}

次のように、aspx ページで ObjectDataSource コントロール パラメーターを設定するさまざまな方法があります。

<DeleteParameters>
  <asp:ControlParameter ControlID="gvChapter7" Name="ID" PropertyName="SelectedDataKey" Type="Int32" />
</DeleteParameters>

誰が私が欠けているものを見ることができますか?

4

0 に答える 0