0

私はEF 4.0でwinformアプリケーションに取り組んでいます。

以下のコードは、「ObjectStateManager にアタッチされていないため、オブジェクトをデタッチできません」という問題でクラッシュします。リストをコンテキストから切り離そうとしたとき。

public List<Users> FindUserList()
        {
            List<Users> lstUsers = null;
            var q = from c in context.Users
                    select c;
            lstUsers = q.ToList();
            //context.Detach(lstUsers.First());
            context.Detach(lstUsers);
            return lstUsers;
        }

驚いたことに、コメント付きのコードで行ったように、リストからオブジェクトを 1 つだけ切り離すと、問題なく動作します。

リストを切り離そうとするとなぜクラッシュするのか、誰か教えてもらえますか? また、リストのすべてのオブジェクトを切り離すにはどうすればよいでしょうか?

4

2 に答える 2

1

lstUsersエンティティではないからです。ただし、返されたエンティティはlstUsers.First()EF によって追跡されます。

于 2011-09-29T09:23:07.710 に答える
0

DbSet に追加.AsNoTracking()してUsers、コンテキストから切り離してみてください。下記参照。

List<Users> lstUsers = null;
var q = from c in context.Users.AsNoTracking()
       select c;
 lstUsers = q.ToList();
 return lstUsers;

MSDN リファレンス
https://msdn.microsoft.com/en-us/library/gg679352(v=vs.103).aspx

.AsNoTracking() の違いに関する StackOverflow の質問は?AsNoTracking

于 2015-10-21T06:13:43.170 に答える