Я снова опубликовал этот вопрос, так как считаю его немного расплывчатым. Новое сообщение
В настоящее время я использую службу Windows с таймером 2 минуты.Сначала я использую код EF с шаблоном хранилища для доступа к данным.Я использую Ninject, чтобы ввести свои зависимости.В моем классе NinjectDependencyResolver есть следующие привязки:
ConnectionStringSettings connectionStringSettings = ConfigurationManager.ConnectionStrings["Database"];
Bind<IDatabaseFactory>().To<DatabaseFactory>()
.InSingletonScope()
.WithConstructorArgument("connectionString", connectionStringSettings.Name);
Bind<IUnitOfWork>().To<UnitOfWork>().InSingletonScope();
Bind<IMyRepository>().To<MyRepository>().InSingletonScope();
Когда моя служба запускается каждые 2 минуты, я делаю что-то похожее на это:
foreach (var row in rows)
{
var existing = myRepository.GetById(row.Id);
if (existing == null)
{
existing = new Row();
myRepository.Add(existing);
unitOfWork.Commit();
}
}
Я начинаю видеть ошибкув моих журналах написано:
Изменения в базе данных были успешно приняты, но произошла ошибка при обновлении контекста объекта.ObjectContext может быть в несовместимом состоянии.Внутреннее сообщение об исключении: AcceptChanges не может продолжаться, потому что значения ключа объекта конфликтуют с другим объектом в ObjectStateManager.Перед вызовом AcceptChanges убедитесь, что значения ключей уникальны.
Правильно ли использовать InSingeltonScope при использовании Ninject в службе Windows?Я полагаю, что я пытался использовать разные области, такие как InTransientScope, но я мог только заставить InSingeltonScope работать с доступом к данным.Сообщение об ошибке имеет какое-либо отношение к Scope или не связано?