На то, как избавиться от “Объекта объекта, не могут сослаться несколько экземпляров IEntityChangeTracker”?

http_payload[:http_payload.index("\r\n\r\n")+2] нарезают строку http_payload так, чтобы только заголовок строки до первого появления «\ r \ n \ r \ n» и первого «\ r \ n» остается. метод строки .index() вернет индекс первого появления шаблона в строке.

Пример:

test = "abcdefg"
# slicing:
print(test[1:3])  # will output 'bc'

# index:
print(test.index('bc'))  # will output 1 (index of start of substring 'bc')

# either start or end (or both) of the slice can be left out, so the following is equivalent:
print(test[:2] == test[0:2])  # will output True

.split("/")[1] разделит строку на символы «/» и вернет список, из которого осуществляется доступ к элементу с индексом 1. См. Следующий код, например:

test = "/this/is/a/path"
print(test.split("/"))  # will output ["this", "is", "a", "path"]
print(test.split("/")[0])  # will output "is" since element of index 1 of the resulting list is accessed.

15
задан Mariano 6 March 2009 в 19:38
поделиться

4 ответа

Я получал это сообщение, пока я не начал хранить контекст данных в HttpContext. Свойство объектов. Это означает, что можно использовать тот же контекст данных для текущего веб-запроса. Тем путем Вы не заканчиваете с 2 контекстами данных, ссылающимися на те же объекты.

Вот хорошее сообщение на Жизненном управлении DataContext.

Я надеюсь, что это помогает.

Dave

17
ответ дан 1 December 2019 в 03:35
поделиться

"шаблон", или что-то, на что это ссылается, было уже добавлено к courseEntities или другому контексту. Я ничего не вижу в коде, Вы показываете, что он сделал бы это, но это, конечно, происходит. Возможно, это происходит в части кода, который Вы обрезали. Посмотрите на свойство EntityState "шаблона" в отладчике и посмотрите на EntityState свойств "шаблона" также. Это должно помочь Вам узнать, какой экземпляр объекта уже находится в контексте.

2
ответ дан 1 December 2019 в 03:35
поделиться

Я уже осознаю проблему. У меня есть другое отношение, и я получаю другой объект от другого контекста.

1
ответ дан 1 December 2019 в 03:35
поделиться

Позвольте мне рассказать о своем опыте с этой неприятной ошибкой и указать на то, что погоня за ней приведет вас к чрезвычайно простому решению.

CompanyGroup - это довольно просто. У него есть имя и объект Company.

Я начал с этого:

1        public static void Add(CompanyGroup item)
2        {
3            try
4            {
5                using (Entities scope = new Entities())
6                {
7             scope.AddToCompanyGroup(item);
8                       scope.SaveChanges();
9                }
10            }
11            catch (Exception ex)
12            {
13                LogException(ex, item);
14                throw;
15            }     
16  }   

И получил эту ошибку:

{"Объект сущности не может быть на него ссылаются несколько экземпляров IEntityChangeTracker. "}

Итак, я добавил это между строками 6 и 7:

        (IEntityWithChangeTracker)item).SetChangeTracker(null);

Это вознаградило меня:

{" Объект не может быть добавлен в ObjectStateManager, потому что он уже имеет EntityKey. использование ObjectContext.Attach, чтобы прикрепить объект с существующим ключом "}

Итак, я изменил

scope.AddToCompanyGroup(item);

на

scope.Attach(item);

Теперь он жаловался на:

{" Объект с временным EntityKey значение не может быть прикреплено к объекту контекст. "}

(начинает звучать как некоторые из девушек, с которыми я встречался в молодости - никогда не доволен - но я отвлекаюсь)

Итак, я сделал ключ объекта нулевым (не работал) и использовал метод создания нового (тоже не работал)

Попутно я тоже получил эту ошибку:

{"Исходный запрос для этого EntityCollection или EntityReference не может быть возвращен, если соответствующий объект находится либо в добавленном состоянии, либо обособленное государство и не было первоначально получено с использованием Параметр слияния NoTracking. "}

Решение?

Заменить ядро, строки 7 и 8, на:

                CompanyGroup newcg = new CompanyGroup();
                newcg.GroupName = item.GroupName;
                newcg.Company = scope.Company.Where(c => c.CompanyID == item.Company.CompanyID).First();

      scope.AddToCompanyGroup(newcg);
                scope.SaveChanges();

По сути, я взял данные, переданные через 'item', и переместил их во вновь созданный объект тот же тип, который вводит тот же scope, как в Add.

1
ответ дан 1 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: