Pregunta

Pude hacer que el registro activo funcionara de inmediato. Las instrucciones para comenzar fueron excelentes y en poco tiempo había construido un servicio web que me permitía crear y leer widgets en mi DB existente. Fue increíble. Sin embargo, cuando se trataba de actualizar, las cosas se desmoronaron. Editaría el objeto en el cliente y lo enviaría de nuevo al servicio, pero cuando el servicio lo guardó, simplemente crearía uno nuevo. Razoné que esto significaba que necesitaría volver a considerar el DB y asignar los valores enviados al servicio del cliente, pero mi jefe dijo que sería hacky y que el patrón del repositorio sería mejor porque podría usar POCOS. Desafortunadamente, ese es el alcance de la guía que he recibido. Asi que aqui están mis preguntas.

  1. Son las plantillas T4 solo buenas para un registro activo o también construirán su repositorio simple para usted. Por ejemplo, ¿hay algo que genere mis POCOS también o están todos 'rodan el tuyo'?

  2. ¿Alguien ha visto un ejemplo de trabajo de una solución subsónica de 3 niveles? He leído sobre ellos, pero ¿hay alguna muestra flotando?

Las muestras de registro activas/ screencasts fueron realmente fáciles de seguir porque comenzaron en el mismo punto con el que estaba comenzando. El repositorio simple parecía centrarse más en las migraciones y otras características avanzadas y ser que esto es nuevo para mí, no sé lo suficiente como para conectar los puntos.

Puaj. No hay nada como tener una fecha límite para aprender algo y tenerlo en funcionamiento para fin de semana. Cualquier consejo sería bienvenido, incluso si es RTFM con un enlace al manual que debería haber leído.

Gracias por adelantado

¿Fue útil?

Solución

Si desea usar un patrón de repositorio, puede usar el plantillas de Linq o use el repositorio simple que no requiere ninguna plantilla T4.

Con un repositorio simple crea el POCOS usted mismo. Subsonic puede crear o actualizar el esquema de la base de datos si lo desea:

var repository=new SimpleRepository(SimpleRepositoryOptions.RunMigrations);

Pero si me preguntas, elegiría SimpleRepositoryOptions.None y actualice la base de datos por mí mismo.

De todos modos, su problema inicial con las plantillas de Activerecord podría solucionarse bastante fácilmente. Sugiero que su objeto Activerecord se sea serializado en el lado del cliente y se deserialice en el servidor.

El constructor predeterminado de un objeto Activerecord llama a la función init que se ve así:

    void Init(){
        TestMode=this._db.DataProvider.ConnectionString.Equals("test", StringComparison.InvariantCultureIgnoreCase);
        _dirtyColumns=new List<IColumn>();
        if(TestMode){
            <#=tbl.ClassName#>.SetTestRepo();
            _repo=_testRepo;
        }else{
            _repo = new SubSonicRepository<<#=tbl.ClassName#>>(_db);
        }
        tbl=_repo.GetTable();
        SetIsNew(true);
        OnCreated();       

    }

Como puede ver, se crea el repositorio interno y SetIsNew(true) es ejecutado. Lo único que tienes que hacer es llamar myitem.SetIsNew(false) Después de que el objeto se pobla con los valores deserializados. Supongo que es suficiente para decirle a Subsonic que haga una consulta de actualización durante el salvamento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top