エンティティ
public class Calculation
{
public int UniqueID { get; set; }
public int Value1 { get; set; }
public int Value2 { get; set; }
public int Result { get; set; }
public Operation Operation { get; set; }
public DateTime EntryDateTime { get; set; }
}
public class Operation
{
public int OperationID { get; set; }
public string OperationName { get; set; }
}
ビジネスロジックレイヤー
public bool UpdateCalculation(Calculation calcObject)
{
bool returnVal = false;
try
{
if (GetCalculationByID(calcObject) != null)
{
returnVal = calcDAL.UpdateCalculation(calcObject);
if (returnVal)
return returnVal;
else
throw new ApplicationException(ResourceHelper.GetErrorResourceValue("MSG003"));
}
else
throw new ApplicationException(ResourceHelper.GetErrorResourceValue("MSG006"));
}
catch (Exception exp)
{
LoggingHelper.WriteLog(exp, MethodBase.GetCurrentMethod(), TraceEventType.Error);
throw exp;
}
}
データ アクセス層:
public bool UpdateCalculation(Calculation calcObject)
{
try
{
object[] parameters = new object[5];
parameters.SetValue(calcObject.UniqueID, 0);
parameters.SetValue(calcObject.Value1, 1);
parameters.SetValue(calcObject.Value2, 2);
parameters.SetValue(calcObject.Result, 3);
parameters.SetValue(calcObject.Operation.OperationID, 4);
int returnVal = _db.ExecuteNonQuery(ResourceHelper.GetSpResourceValue("UPD_CALC"), parameters);
if (returnVal > 0)
return true;
else
return false;
}
catch (Exception exp)
{
Utilities.LoggingHelper.WriteLog(exp, MethodBase.GetCurrentMethod(), TraceEventType.Error);
throw exp;
}
}
Enterprise Library 5.0 を使用して、DAL から DB 操作を実行しています。
以下のコードは、Web プロジェクトでオブジェクトが HTML にバインドされる方法を示しています。
Webサイト
<asp:GridView ID="GridView1" runat="server" AllowPaging="True" PageSize="3" AutoGenerateColumns="False"
DataSourceID="CalculationDS" AllowSorting="True" OnRowDeleted="GridView1_RowDeleted"
OnRowUpdated="GridView1_RowUpdated" OnSorting="GridView1_Sorting"
onrowupdating="GridView1_RowUpdating" DataKeyNames="UniqueID">
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:BoundField DataField="UniqueID" HeaderText="UniqueID"
SortExpression="UniqueID" />
<asp:BoundField DataField="Value1" HeaderText="Value1"
SortExpression="Value1" />
<asp:BoundField DataField="Value2" HeaderText="Value2"
SortExpression="Value2" />
<asp:BoundField DataField="Result" HeaderText="Result"
SortExpression="Result" />
<asp:TemplateField HeaderText="Operation"
SortExpression="OperationName">
<EditItemTemplate>
<asp:DropDownList ID="drpOperations" runat="server" DataSourceID="OperationDS"
DataTextField="OperationName" DataValueField="OperationID"
SelectedValue='<%# Eval("Operation.OperationID") %>'>
</asp:DropDownList>
<asp:ObjectDataSource ID="OperationDS" runat="server"
SelectMethod="GetAllOperations" TypeName="SampleBLL.OperationBLL">
<SelectParameters>
<asp:Parameter DefaultValue="OperationName" Name="sortExpression"
Type="String" />
<asp:Parameter DefaultValue="Ascending" Name="sortDirection" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Eval("Operation.OperationName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="EntryDateTime" HeaderText="EntryDateTime"
SortExpression="EntryDateTime" />
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="CalculationDS" runat="server" DataObjectTypeName="SampleEntities.Calculation"
DeleteMethod="DeleteCalculation" InsertMethod="InsertCalculation" SelectMethod="GetAllCalculations"
TypeName="SampleBLL.CalculationBLL" UpdateMethod="UpdateCalculation" OnSelecting="CalculationDS_Selecting"
OnUpdating="CalculationDS_Updating">
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" DefaultValue="UniqueID" Name="sortExpression"
PropertyName="SortExpression" Type="String" />
<asp:ControlParameter ControlID="GridView1" Name="sortDirection" PropertyName="SortDirection"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
行を編集して送信しようとすると、計算オブジェクトの操作 ID を NULL で読み取ると、CALCULATION オブジェクトの OPERATION 列が DAL で NULL になります。
CalculationDs (ObjectDatasource) Updating イベントと GridView Updating イベントから値を読み取ろうとしましたが、使用できません。
OPERATION オブジェクト列は、GridView 列に自動的にマップされません。
前もって感謝します。このアップデートが機能するための解決策があれば.. !!:(