0

EntityFramework 4 では、次からエンティティを取得する正しい方法

どれ
ですか?

エンティティにlinqを使用して、現在データベースにあるデータを取得します。
を使用してObjectStateManager.GetObjectStateEntries(entityState).Select(ent => ent.Entity).OfType<IEntityWithKey>()、(必要に応じて)追加および/または削除を取得します

エンティティへのlinqを使用すると、クエリ結果に削除されたオブジェクトが表示されるため、グリッドビューに表示されます(ModifiedおよびUnchangedと同様)が、これは私が望むものではなく、削除されたオブジェクトは必要ありません。

私が必要としているのは、削除されたオブジェクトと、メモリ内に追加されたオブジェクトを除いて、現在データベースにあるすべてのデータをグリッドビューに表示することです。(これはすべて、Savechanges を呼び出す前に行われます)。

型指定されたコレクションを返し、それに gridview データソースを設定する BL クラスのメソッドがあります。
これを達成するために、私は次のことを行います:
- db データを取得するためのエンティティへの linq (たとえば Collection1)、
- GetObjectStateEntries(Deleted) を使用して削除されたエンティティ (Collection2) を取得する、
- GetObjectStateEntries(Added) を使用して新しいメモリ内に追加されたものを取得する (Collection3 )

次に Collection1.ToList() を繰り返して Collection2 のアイテムを削除し、次に Collection3 との Union を削除します。

それは機能しますが、私はそれが好きではありません。

それを行うためのより良い/適切な方法はありますか? ヘルプ/提案はありますか?

事前にサンクス。

ここにいくつかのコードがあります。
データベース エンティティを取得する方法 (削除されたオブジェクトはここに含まれます):

public IEnumerable<ConnectorTransformationLookUpConceptData> GetConnectorTransformationLookUpConceptsView(int idConnectorTransformation)
    {
    var data = from r in Entities.ConnectorTransformationLookUpConcept
               join c in Entities.LookUpConcept on r.IdLookUpConcept equals c.IdLookUpConcept
               ....

    return ExcludeDeleted(data).Union(AddedData(idConnectorTransformation)).OrderBy(e => e.Concept);
    }

削除されたオブジェクトを削除する方法 (前のリターンで呼び出されます) :

private List<ConnectorTransformationLookUpConceptData> ExcludeDeleted(IEnumerable<ConnectorTransformationLookUpConceptData> collection)
    {
        List<ConnectorTransformationLookUpConceptData> l = collection.ToList();
        var deleted = GetDeletedEntities<ConnectorTransformationLookUpConcept>();

        foreach (ConnectorTransformationLookUpConcept d in deleted)
        {
            ConnectorTransformationLookUpConceptData o = l.Find(c => c.idConnTransf == d.IdConnectorTransformation && c.idLooUpConcept == d.IdLookUpConcept);
            if (o != null) l.Remove(o);
        }

        return l;
    }

前の "AddedData" および "GetDeletedEntities" 呼び出しによって最終的に呼び出されるメソッド。目的のオブジェクトを返します (EntityState.Added または EntityState.Deleted 内)。

protected IEnumerable<IEntityWithKey> GetEntities<IEntityWithKey>(EntityState entityState)
    {
        IEnumerable<IEntityWithKey> data =
        this.Entities.ObjectStateManager.
            GetObjectStateEntries(entityState).
            Select(ent => ent.Entity).
            OfType<IEntityWithKey>();
        return data;
    }
4

0 に答える 0