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.
Я получал это сообщение, пока я не начал хранить контекст данных в HttpContext. Свойство объектов. Это означает, что можно использовать тот же контекст данных для текущего веб-запроса. Тем путем Вы не заканчиваете с 2 контекстами данных, ссылающимися на те же объекты.
Вот хорошее сообщение на Жизненном управлении DataContext.
Я надеюсь, что это помогает.
Dave
"шаблон", или что-то, на что это ссылается, было уже добавлено к courseEntities или другому контексту. Я ничего не вижу в коде, Вы показываете, что он сделал бы это, но это, конечно, происходит. Возможно, это происходит в части кода, который Вы обрезали. Посмотрите на свойство EntityState "шаблона" в отладчике и посмотрите на EntityState свойств "шаблона" также. Это должно помочь Вам узнать, какой экземпляр объекта уже находится в контексте.
Я уже осознаю проблему. У меня есть другое отношение, и я получаю другой объект от другого контекста.
Позвольте мне рассказать о своем опыте с этой неприятной ошибкой и указать на то, что погоня за ней приведет вас к чрезвычайно простому решению.
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.