0

だから私はこれがそれほど特別ではない方法を持っています

public void FlagVoyageAsRemoved(int voyageId)
    {
        using (UnitOfWork uw = new UnitOfWork())
        {
            Voyage voyage = uw.VoyageRepository.FindSingle(v => v.VoyageId == voyageId,  
new string[] { "VoyageUsers.Costs" });
            List<Cost> userCosts = voyage.VoyageUsers.SelectMany(vu => vu.Costs).ToList();
//altough i am putting my items in a new list meaning its a new memory adress, the object tracker can still see them as part of the original collection, how come?
            costBl.FlagCostsAsDeleted(userCosts);
// these methods just change a proprety in each element of the collection, nothing more.
            costBl.FlagCostsAsDeleted(voyage.Costs);
            vUserBl.FlagVoyageUsersAsDeleted(voyage.VoyageUsers);
            voyage.HasDeleteFlag = true;
            uw.Commit();
        }
    }

私の質問は、linq を使用しているときに、新しいリスト要素を元のコレクションの一部としてどのように識別できるのか、またはこれはエンティティ フレームワーク オブジェクト トラッカーからのものなのかということです。

4

1 に答える 1

1

Entity Framework は、取得するすべてのオブジェクトとコレクションを追跡するため、呼び出したときcontext.SaveChanges()(そして、それがあなたのメソッドで起こっていると思いますuow.Commit()) は、何をチェックすべきかを既に認識しています。

それが役に立てば幸い。

于 2012-09-08T21:13:23.077 に答える