无法更新EntitySet'<entity>',因为它具有DefiningQuery

时间:2019-06-04 20:28:43

标签: c# sql-server entity-framework entity-framework-6

我正面临一个从未有过的奇怪问题。

我在MVC应用程序的控制器中具有以下操作:

    //
    // GET: /Servicio/FijoInventario/Almacena
    async public Task<ContentResult> Almacena()
    {
        try
        {
            CheckSignature();

            string data = Request.Form.ToString();
            if (String.IsNullOrEmpty(data))
                return Content("FAIL");

            DateTime fecha = DateTime.Now;

            // Campos -> "Correlativo;Auditor;Dirección;Empresa;Tipo;EPC;NroSerie;Marca;Modelo;En Uso;RUT Usuario;Nombre Usuario;Fecha;Hora";
            var inventarios = Server.UrlDecode(data).Split('\n');

            var auditor = new Helpers.Auditor(DB);
            var direccion = new Helpers.Direccion(DB);
            var tipo = new Helpers.Tipo(DB);
            int index = 0;
            foreach (var inventario in inventarios)
            {
                var cells = inventario.Trim().Split(';');
                if (cells.Length != 16 || index++ == 0)  // index = 0 => encabezado
                    continue;

                string epc = cells[5].Trim();

                DateTime fechaHora = DateTime.MinValue;

                if (!DateTime.TryParseExact(String.Concat(cells[12].Trim(), " ", cells[13].Trim()), "dd-MM-yyyy HH:mm", System.Globalization.CultureInfo.CurrentUICulture, System.Globalization.DateTimeStyles.None, out fechaHora))
                    DateTime.TryParseExact(String.Concat(cells[12].Trim(), " ", cells[13].Trim()), "dd/MM/yyyy HH:mm", System.Globalization.CultureInfo.CurrentUICulture, System.Globalization.DateTimeStyles.None, out fechaHora);

                Models.Direccion oDireccion = direccion.ObtieneDireccionByNombre(cells[2].Trim());

                bool enrolado = cells[14].Trim().Equals("Sí");
                bool inventariado = cells[15].Trim().Equals("Sí");

                Models.FijoInventario inv = DB.FijoInventario.Where(i => i.InventarioEPC == epc && i.DireccionId == oDireccion.DireccionId && i.InventarioEnrolado == enrolado && i.InventarioInventariado == inventariado).FirstOrDefault();

                if (inv == null)
                {
                    inv = new Models.FijoInventario();
                    inv.InventarioFechaCreacion = fecha;

                    DB.FijoInventario.Add(inv);
                }
                else
                    inv.InventarioFechaModificacion = fecha;

                inv.Auditor = auditor.ObtieneAuditorByNombre(cells[1].Trim());
                inv.Direccion = oDireccion;
                inv.Tipo = cells[4].Trim() == String.Empty ? null : tipo.ObtieneTipoByNombre(cells[4].Trim());
                inv.InventarioEPC = epc;
                inv.InventarioNumeroSerie = cells[6].Trim();
                inv.InventarioMarca = cells[7].Trim();
                inv.InventarioModelo = cells[8].Trim();
                inv.InventarioEnUso = cells[9].Trim().Equals("Sí");
                inv.InventarioRutUsuario = GetModifiedSignal(cells[10].Trim(), false);
                inv.InventarioNombreUsuario = cells[11].Trim();
                inv.InventarioFecha = fechaHora.Date;
                inv.InventarioHora = fechaHora;
                inv.InventarioEnrolado = enrolado;
                inv.InventarioInventariado = inventariado;

                var importacion = new Models.FijoImportacion
                {
                    ExportacionEPC = epc,
                    ExportacionFechaInventario = fechaHora,
                    ExportacionFechaCreacion = DateTime.Now,
                    ExportacionLinea = inventario.Trim()
                };
                DB.FijoImportacion.Add(importacion);
            }

            await DB.SaveChangesAsync();

            return Content("OK");
        }
        catch (Exception ex)
        {
            Helpers.ErrorLog.Save(ex);
            throw ex;
        }
    }

此代码仅通过Internet接收CSV文件,并将每一行作为记录保存到SQL Server表中。

这很好直到大约15天前。我刚刚意识到,在Almacena动作中,自该日期起便抛出该异常:

Unable to update the EntitySet 'FijoImportacion' because it has a DefiningQuery and no <InsertFunction> element exists in the <ModificationFunctionMapping> element to support the current operation.
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Dashboard.Areas.Servicio.Controllers.FijoInventarioController.<Almacena>d__1.MoveNext()

通过Internet进行搜索,没有任何解决方案适合我。这只是1个定义了主键的表。

主表具有3个关系:审计员,Direccion,Tipo。所有表都定义了主键。

以防万一,我已经重新生成了EDMX文件,但是发生了相同的错误。

这里可能会发生什么?

致谢

Jaime

0 个答案:

没有答案