Как добавить объект, который прикреплен к ObjectContext, к EntityCollection, который не связан с исходным объектом - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь отсортировать дочернюю коллекцию с помощью Entity Framework.Это мой код:

        var query = db.Category
            .Where(p => p.parrent_id == null)
            .OrderByDescending(x => x.prefix)
            .Select(o => new 
            {
                Category = o,
                SubCategories = o.Category1.OrderBy(h => h.prefix)
            });

        IEnumerable<Category> cats = query.AsEnumerable()
            .Select(x => new Category
            {
                category_id = x.Category.category_id,
                parrent_id = x.Category.parrent_id,
                category_name = x.Category.category_name,
                prefix = x.Category.prefix,
                Category1 = x.SubCategories.ToEntityCollection()
            });

метод ToEntityCollection выглядит следующим образом:

        public static EntityCollection<T> ToEntityCollection<T>(this IEnumerable<T> source) where T : class
    {
        var es = new EntityCollection<T>();
        foreach (T e in source)
        {
            es.Add(e);
        }
        return es;
    }

Я получаю следующую ошибку:

System.InvalidOperationException: The object could not be added to the EntityCollection or EntityReference. An object that is attached to an ObjectContext cannot be added to an EntityCollection or EntityReference that is not associated with a source object. 

on

es.Add(e);

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 17 апреля 2014

это спрашивалось ранее: Ошибка при использовании ADO.NET Entity Framework

Узнайте, почему должно работать Attach вместо Add: http://msdn.microsoft.com/en-us/data/jj592676.aspx

0 голосов
/ 07 июля 2011

Вы не можете присоединять сущности к другому контексту, когда они присоединены к другому.Вам нужно отсоединить его от предыдущего, если вы хотите это сделать.http://msdn.microsoft.com/en-us/library/bb896271.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...