使用ASP.NET/C#/nHibernate体系结构 - 我有一个GridView
ObjectDataSource
,但是在使用delete方法时遇到了问题。
当我只使用我的服务层中声明的Remove(T entity)
函数(然后调用我的nHibernate存储库)时,调用GridView_RowDeleting()
方法,然后调用ObjectDataSource_Deleting()
,然后调用服务层函数并正确删除业务对象。
但是,当我尝试使用RemoveByID(int ID)
函数时,在调用GridView_RowDeleting()
和ObjectDataSource_Deleting()
方法之后,永远不会调用服务层。
我认为这与ObjectDataSource.DeleteParameters
有关,但我似乎无法做到正确。
以下是GridView和ObjectDataSource的代码片段。如您所见,我在GridView的pkChapter7ID
{<1}}中列出了业务对象的主键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);
}
我尝试在_RowDeleting方法中设置DeleteParameters
:
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>
有人能看到我错过的东西吗?