#c# #webforms #entity-framework-6
#c# #веб-формы #entity-framework-6
Вопрос:
Я новичок в использовании EF6 в webforms. Я пытаюсь обновить единственную строку, доступную в таблице, у которой нет идентификатора, это просто таблица конфигураций параметров для приложения.
У меня есть этот метод обновления в formview. Это выдает мне ошибку, когда я пытаюсь загрузить элемент. Я думаю, что здесь я делаю это неправильно, но не уверен, что мне нужно делать. Я ничего не знаю о linq.
Ошибка 11 Не удается неявно преобразовать тип ‘System.Linq.IQueryable’ в ‘InventarioCiclico.xInventarioConfigs’. Существует явное преобразование (вам не хватает приведения?) C:UsersA0H79224DocumentsVisual Studio 2013ProjectsInventarioCiclicoInventarioCiclicoAccountAdminConfigurarInventario.aspx.cs 73 20 InventarioCiclico
// The id parameter name should match the DataKeyNames value set on the control
public void fvInventarioConfigs_UpdateItem(xInventarioConfigs configs)
{
InventarioCiclico.xInventarioConfigs item = configs;
InventarioCiclicoContext context = new InventarioCiclicoContext();
// Load the item here, e.g. item = MyDataLayer.Find(id);
item = (from c in context.xInventarioConfigs select c).Take(1);
if (item == null)
{
// The item wasn't found
ModelState.AddModelError("", String.Format("Item with id was not found"));
return;
}
TryUpdateModel(item);
if (ModelState.IsValid)
{
context.SaveChanges();
// Save changes here, e.g. MyDataLayer.SaveChanges();
}
}
Ответ №1:
Take возвращает IQueryable, даже если вы выбрали только одну запись с помощью Take(1). Вы можете использовать что-то вроде этого в качестве быстрого исправления:
item = (from c in context.xInventarioConfigs select c).Take(1).FirstOrDefault();
Или даже без Take as FirstOrDefault все равно выбирает одну строку.
Ответ №2:
Take возвращает IQueryable, который может содержать только один элемент, но все равно является своего рода коллекцией. Если вы выбираете только одну запись с помощью Take (1), вы также можете выбрать First (будьте осторожны, если в вашем результирующем наборе их нет) или FirstOrDefault напрямую
item = (from c in context.xInventarioConfigs select c).FirstOrDefault();