У меня проблема с вставкой и удалением объектов в / из базы данных с использованием Linq to SQL при использовании различных контекстов данных. Код работает просто отлично, пока я вставляю и удаляю, используя тот же контекст. Однако использование одного и того же контекста для каждой функции не вариант, так как это создаст проблемы параллелизма, поскольку код используется для веб-службы.
Код написан на F #, но это не должно иметь никакого значения.
let CreateUser user =
use context = new Rsvp(connectionString)
context.Users.InsertOnSubmit(user)
context.SubmitChanges()
let RemoveUserById user_id =
use context = new Rsvp(connectionString)
let user = GetUser user_id
context.Users.DeleteOnSubmit(user)
context.SubmitChanges()
Исключение выдается из DeleteOnSubmit следующим образом:
System.InvalidOperationException: Невозможно удалить объект, который не был присоединен.
Теперь вы можете подумать, что можете просто прикрепить объект к новому контексту данных. Однако это вызовет еще одно исключение:
System.NotSupportedException: была сделана попытка присоединить или добавить объект, который не является новым, возможно, был загружен из другого DataContext. Это не поддерживается.
Я тестирую это из тестового проекта C # по следующей методике
[TestMethod]
public void Can_create_and_remove_a_new_user()
{
User user = new User();
user.Name = "Test User";
user.Email = "test@mail.com";
user.Role_id = 1;
UserModule.CreateUser(user);
User inserted_user = UserModule.GetUserByEmail("test@mail.com");
Assert.IsNotNull(inserted_user);
UserModule.RemoveUserById(inserted_user.Id);
}
Разве нельзя удалить / вставить один и тот же объект из разных контекстов?
EDIT:
Друг прислал мне эту статью , которая может помочь решить проблему, но, похоже, она не является окончательным решением проблемы.