私は EF 5 Code-First ソリューションに取り組んでおり、リポジトリ パターンを使用して変更されたエンティティで既存のエンティティを更新しようとしています。
public void UpdateValues(T originalEntity, T modifiedEntity)
{
_uow.Context.Entry(originalEntity).CurrentValues.SetValues(modifiedEntity);
私の簡略化されたドメイン オブジェクトは次のようになります。
public class PolicyInformation : DomainObject
{
//Non-navigation properties
public string Description {get;set;}
public bool Reinsurance {get;set;}
...
//Navigation properties
LookupListItemFormType FormType {get;set;}
...
}
私が抱えている問題は、CurrentValues.SetValues(modifiedEntity);
メソッドがスカラーおよび複合型のプロパティのみを更新しているように見え、Navigation プロパティは更新していないように見えることです。私はこれが多くの人に起こっているのを見てきましたが、それがなぜなのかはまだわかりません. ただし、すべてを実行した後にこれらのナビゲーション プロパティを手動で設定すると、UpdateValues
すべて正常に動作することがわかりました。
_policyInfoRepo.UpdateValues(existingPolicyInfo, info);
existingPolicyInfo.FormType = info.FormType;
問題は、汎用リポジトリを使用しているためです。ドメイン オブジェクトのナビゲーション プロパティのリストを取得するにはどうすればよいですか? おそらくlinq、リフレクション、またはその他の方法を使用して、リポジトリの更新メソッドがそれらをループして自動的に設定できるようにしますか?
このようなもの:
public void UpdateValues(T originalEntity, T modifiedEntity)
{
//Set non-nav props
_uow.Context.Entry(originalEntity).CurrentValues.SetValues(modifiedEntity);
//Set nav props
var navProps = GetNavigationProperties(originalEntity);
foreach(var navProp in navProps)
{
//Set originalEntity prop value to modifiedEntity value
}
ありがとう!