使用实体框架更新表中的单行

时间:2019-03-13 08:42:08

标签: c# webforms entity-framework-6

我是在Webforms中使用EF6的新手。我正在尝试更新表中唯一没有ID的行,它只是应用程序的参数配置表。

我在formview上有此更新方法。当我尝试加载项目时,它给了我错误。我认为我在这里做错了,但是不确定我需要做什么。我对linq一无所知。

  

错误11无法将类型'System.Linq.IQueryable'隐式转换为'InventarioCiclico.xInventarioConfigs'。存在显式转换(是否缺少强制转换?)C:\ Users \ A0H79224 \ Documents \ Visual Studio 2013 \ Projects \ InventarioCiclico \ InventarioCiclico \ Account \ Admin \ ConfigurarInventario.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();

        }
    }

2 个答案:

答案 0 :(得分:2)

即使您使用 Take(1)仅选择一条记录,

Take 也会返回 IQueryable 。您可以使用以下方法作为快速解决方案:

item = (from c in context.xInventarioConfigs select c).Take(1).FirstOrDefault();

或者即使没有Take as FirstOrDefault也会选择一行。

答案 1 :(得分:1)

Take返回一个IQueryable,其中可能仅包含一项,但仍然是各种集合。如果您使用Take(1)仅选择一条记录,则最好直接选择First(如果结果集中没有记录,请谨慎选择)或FirstOrDefault

item = (from c in context.xInventarioConfigs select c).FirstOrDefault();