我正面临一个从未有过的奇怪问题。
我在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