2012-01-20 11 views
1

IDを持つオブジェクトを持たないオブジェクトを比較するにはどうしても同じことがありますか?Entity Framework:IDのない汎用比較型?

私はオンラインの多くの例を見てきたために、典型的な一般的なアップデートを、やろうとしていますが、それらはすべて、通常このような何かを見て:

public void Update(TClass entity) 
{ 
    TClass oldEntity = _context.Set<TClass>().Find(entity.Id); 
    foreach (var prop in typeof(TClass).GetProperties()) 
    { 
     prop.SetValue(oldEntity, prop.GetValue(entity, null), null); 
    } 
} 

か何かsimilar.The私のシステムの問題はありますすべてのクラスがIdという名前のプロパティを持っているわけではないことに注意してください。IdにはClassnameIdを使用できます。とにかく、私は、LINQを介してそのようなエンティティの存在を確認し、一般的にプロパティを提供しないで返すのですか?

答えて

1

は、更新値のみが複雑で、スカラープロパティではなく、ナビゲーションプロパティを更新しても、私が読んだものから、

public void Update(TClass entity) 
{ 
    var oldEntry = _context.Entry<TClass>(oldEntity); 

    if (oldEntry.State == EntityState.Detached) 
    { 
     _context.Set<TClass>().Attach(oldEntity); 
    } 

    oldEntry.CurrentValues.SetValues(entity); 
    oldEntry.State = EntityState.Modified; 
} 
+0

Thannksを試してみてください?つまり、グループのコレクションを持ち、1つのグループを削除して更新するユーザーがいる場合、その変更はCurrentValues.SetValuesには適用されません。それとも、単に私は変更することはできませんし、ユーザーオブジェクト上のこのメソッドを介して実際のグループオブジェクトを更新することはできますか? http://stackoverflow.com/questions/6974660/entity-framework-generic-repositoryあなたのコードにもタイプミスはありますか? Entryはエンティティをパラメータとして取るように見えますが、dbから取得した場合はデタッチされますか? – SventoryMang

+0

@DOTangあなたはナビゲーションプロパティについて正しいです。一般的な更新方法は、すべてのケースで機能しません。私は上記のコードをコンパイルしませんでした。ですから、おそらくタイプミス@ – Eranga

+0

@ Erange Thanks Eranga。しかし、あなたがグループのICollectionを持つUserオブジェクトを持っているなら、その意味を明確にしてください。 a)特定のユーザーのコレクションからグループを削除してユーザーを更新すると、削除されたグループの変更が保存されない、またはb)実際のグループオブジェクトを変更しようとした場合(つまり、コレクションから名前プロパティーを削除し、ユーザーを更新すると、グループオブジェクトの変更は保存されませんか? – SventoryMang

関連する問題