Я абсолютно новичок в Entity Framework, поэтому, пожалуйста, не стесняйтесь указывать на любые ошибки.В любом случае я постараюсь описать мою проблему так, как я ее понимаю.
Я создаю n-уровневое приложение с Entity Framework.Я также использую общий репозиторий, как описано в на этой странице .
Мне удалось заполнить DetailsView
и вставить значение в базу данных через ObjectDataSource ,Однако проблема, с которой я сталкиваюсь, возникает при обновлении.
Я получаю ошибку:
Не удалось найти объект с ключом, который совпадает с ключом предоставленного объекта.в ObjectStateManager.Убедитесь, что значения ключа предоставленного объекта соответствуют значениям ключа объекта, к которому должны быть применены изменения.
И я понимаю, ПОЧЕМУ это происходит также.Я использую следующие методы для заполнения значений из БД.
public IEnumerable<TEntity> GetAll<TEntity>() where TEntity : class
{
return GetQuery<TEntity>().AsEnumerable();
}
public List<Company> GetAllCompanies()
{
return _genericRepository.GetAll<Company>().ToList();
}
Если я ставлю точку останова в методе GetAll
и наблюдаю результаты, я вижу, что установлен EntityKey
и IsChangeTracked
Значение true для каждого объекта в списке.
Но если я проверю, передан ли объект UpdateMethod
, указанный для ObjectDataSource
, то EntityKey
равен нулю, EntityState
отсоединен и IsChangeTracked
ложноТаким образом, поскольку EntityKey имеет значение null, я понимаю, что исключение действительно.
Мой метод обновления выглядит как
public void Update<TEntity>(TEntity entity) where TEntity : class
{
ObjectSet<TEntity> objSet = DataContext.CreateObjectSet<TEntity>();
objSet.ApplyCurrentValues(entity);
SaveChanges();
}
Я пытался присоединить, используя objSet.Attach(entity);
, тогда никаких исключений, но объект нелибо получить обновление.
Как правильно выполнить обновление с использованием DetailsView?Или как правильно связать ObjectDataSource
с DetailsView
?Как мне убедиться, что мой EntityKey не становится нулевым?