私は数多くのテーブルを含むpostgresデータベースを持っています。このプロジェクトは、Entity Frameworkを使用して実装されています。Entity Frameworkのベースデータベーステーブルに影響を与えずにオブジェクトを変更できますか?
私は3つのデータベースクラスを持っています。A、B &と言うことができます。クラスAには、Bのオブジェクトのリストが含まれています。クラスBは、Cのオブジェクトのリストを含む。クラスCは、いくつかのフィールドを含む単純なクラスです。
[Table("A")]
public class A: GUIDModelBase
{....
}
データは以下のように満たされている:いくつかの特定の要件については
Parent1 [A]
-Child1 [B]
--Grandchild1 [C]
--Grandchild2 [C]
-Child2 [B]
--Grandchild3 [C]
--Grandchild4 [C]
を、 私はAPIを使用してオブジェクトAにテーブルのデータを取得する
これらのクラスの始まりは、次のようになり以下のようになります。
A AObj = commonDbService.ARepository.GetAById(A.Id);
GetAByIdはdbseトン以下のように:
protected DbSet<TEntity> dbset = null;
public Project GetAById(Guid id)
{
return dbset.Include(x => x.CoordinateSystem)
.SingleOrDefault(p => p.Id == id);
}
私が操作したいと以下のように別のクラスのオブジェクトにAOBJのデータを保存する(いけないGrandchild2とGrandchild4を持つようにしたい):でも、私はこれを行うと、
MigrationData md = new MigrationData();
md.ANewObj = Manipulate(AObj); //Removes two grandchildren elements
AObjも完全に変更されます。 AObjとデータベーステーブルに完全なデータがそのまま残っている必要があります(ただし、アプリケーションを再起動するまで一時的に)。表のデータは、UIページの1つに表示されます。上の行のように修正されるとすぐに、UIページに残っているのは2人の孫だけです。しかし、私がアプリケーションを再起動すると、すべての孫がデータベースに存在します。
このため、ベースデータベーステーブルを変更しなければ、個別に変更することはできません。 これは誰でも手伝ってもらえますか?
[Entity Frameworkコードファーストでオブジェクトをデタッチするにはどうすればよいですか?](http://stackoverflow.com/questions/5599147/how-do-i-detach-objects-inentity-framework-code-最初に) – Gusman
@Gusman:上記の共有リンクのように親オブジェクトを切り離すために両方の方法を試してみました。しかし、私がデタッチするかAsNoTrackingするとすぐに、すべての子オブジェクトが完全に削除されます。親とそのフィールドだけが元のままで、子カウントは0になります。私はすべてのデータをオブジェクトにそのまま残し、このオブジェクトにさらに変更してデータベースに影響を与えないようにします。私は解決策に近づいているように見えるが、それを働かせることはできない。これを正確に行う方法についてもっと教えてもらえますか?ありがとう。 – vinmm
子要素をクエリに含めましたか?デフォルトでそれらをインクルードしないと、EFは遅延ロードを行い、オブジェクトがデタッチされるとそれを使用することはできません。私はあなたが明示的にそれらが保存される下位要素を含めると思います。それ以外の場合は、まず子要素を切り離してから、ルートオブジェクトを切り離してください。 – Gusman