私はObjectDataSource
を持っています。EFを更新して保存するビジネスレイヤメソッドを呼び出します。私はこの奇妙な問題を抱えています。以下のODSマークアップです:DbContext/ObjectDataSource更新の問題
<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);
}
このコードは、私は例外を取得実行すると:
メンバー 'エンティティ'がエンティティに存在しないため、このタイプのエンティティに対して 'CurrentValues'を呼び出すことはできません。コンテクストに エンティティを追加するには、DbSetのAddメソッドまたはAttachメソッドを呼び出します。
ただし、dbset.attachを実行すると、エンティティがすでに存在するという例外が発生します。
私は何ができるのかわかりませんが、私にとっては循環的な問題のようです。私はこの上に私の髪を引っ張る半分大げさに行ってきました。助けてください。
これがロードされているかどうかを確認するにはどうすればよいですか? – ASR
@ user875615編集された回答を参照してください。 – Eranga