EFを更新して保存するObjectDataSource
Which Callsビジネスレイヤーメソッドがあります。私はこの奇妙な問題を抱えています。以下は ODS マークアップです。
<asp:ObjectDataSource ID="odsDeviceForm" runat="server" ypeName="Spectre.BLL..DeviceManager"
DataObjectTypeName="Model.Device" SelectMethod="GetById"
InsertMethod="Insert" oninserting="OnItemInserting" UpdateMethod="UpdateEx"
oninserted="OnItemInserted" onupdated="OnItemUpdated"
onupdating="OnItemUpdating" onobjectcreated="OnOdsObjectCreated"
onselected="OnOdsItemSelected" ConflictDetection="CompareAllValues" OldValuesParameterFormatString="orig{0}" >
<SelectParameters>
<asp:SessionParameter Name="primaryKey" SessionField="SelectedDeviceId" Type="Int32" />
</SelectParameters>
以下は BLL と repositoryCode: BLL:
public void UpdateEx(T entity, T origentity)
{
try
{
repository.Update(origentity, entity);
repository.Save();
}
catch (Exception)
{
throw;
}
}
リポジトリ:
public void Update(T orig, T newEntity)
{
myContext.Entry<T>(newEntity).CurrentValues.SetValues(newEntity);
}
このコードを実行すると、例外が発生します。
エンティティがコンテキストに存在しないため、タイプ 'Device' のエンティティに対してメンバー 'CurrentValues' を呼び出すことはできません。エンティティをコンテキストに追加するには、DbSet の Add メソッドまたは Attach メソッドを呼び出します。
しかし、dbset.attach を実行すると、エンティティが既に存在するという例外が発生します。
どうすればよいかわかりません。循環問題のように思えます。私はこれで髪を引っ張って半分ハゲになりました。助けてください。