es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En 2sxc, después de un App.Data.Create(), ¿hay alguna manera de obtener el nuevo EntityId (o Guid) o un Puntero a la nueva Entidad?

Me he encontrado con esta necesidad algunas veces en los últimos años. Agrego programáticamente una nueva entidad a un tipo de contenido usando App.Data.Create() y luego necesito agregar esa nueva entidad a la siguiente entidad que voy a crear (nuevo registro en un tipo de contenido diferente).

Dado que .Create() no devuelve nada, ¿cuál es la mejor, correcta o elegante forma de acceder al nuevo elemento?

Aquí está mi solución rudimentaria, pero parece que probablemente hay una forma más lógica. Además, en un sitio ocupado, esto podría no funcionar si hay múltiples .Create() casi al mismo tiempo.


// encontrar el más nuevo con el EntityId más alto
int maxEntityId = 0;
var tmp = AsList(App.Data["Markers"])
.OrderByDescending(m => m.EntityId)
.FirstOrDefault();
;
if (tmp != null){
maxEntityId = tmp.EntityId;
}

Tags:  ,

Answer

  1. Avatar for davy.ai

    La solución mediocre proporcionada en la pregunta no es la mejor, correcta o elegante forma de obtener el nuevo elemento. Hay un par de opciones para lograr esto:

    1. Utilice el método App.Data.CreateWithEntity() en lugar de App.Data.Create(). Este método devolverá la entidad creada, que luego se puede usar para crear la siguiente entidad.
    var newEntity = App.Data.CreateWithEntity<contentitem>("NombreDelTipoDeContenido");
    // hacer algo con la nueva entidad
    var nextEntity = App.Data.Create<contentitem>("NombreDiferenteDelTipoDeContenido");
    
    1. Utilice App.Data[<tipo-de-contenido>].Last(). Esto devolverá la última entidad creada para el tipo de contenido específico, que debería ser la entidad creada más recientemente.
    var lastEntity = App.Data["NombreDelTipoDeContenido"].Last();
    // hacer algo con la última entidad
    var nextEntity = App.Data.Create<contentitem>("NombreDiferenteDelTipoDeContenido");
    

    Ambas opciones son más eficientes y confiables que la solución mediocre proporcionada en la pregunta.

Comments are closed.