En mi opinión, el campo ID de un objeto comercial debe ser de solo lectura (public get y private set) ya que por definición el ID nunca cambiará (ya que identifica de manera única un registro en la base de datos).¿El ID en el objeto comercial debe ser de solo lectura o no?
Esto crea un problema cuando crea un objeto nuevo (ID no configurado aún), guárdelo en la base de datos a través de un procedimiento almacenado que devuelve la ID recién creada y luego cómo la almacena nuevamente en el objeto si ¿La propiedad de ID es de solo lectura?
Ejemplo:
Employee employee = new Employee();
employee.FirstName="John";
employee.LastName="Smith";
EmployeeDAL.Save(employee);
¿Cómo funciona el método Save (que en realidad se conecta a la base de datos para guardar el nuevo empleado) actualizar la propiedad EmployeeId en el objeto Empleado si esta propiedad es de sólo lectura (que debería ser ya que el EmployeeId nunca cambiará una vez que se haya creado).
Parece que el ID debe poder escribir en el DAL y ser de solo lectura para el resto del mundo. ¿Cómo se implementa esto especialmente si las clases DAL y Business están en ensamblajes diferentes?
No quiero crear un método Guardar en la clase Empleado ya que esta clase no debería tener nada que ver con la base de datos.
Un viejo problema por el que no creo, hay una respuesta "agradable", solo un compromiso menos malo. –
Anthony, borré mi respuesta. Creo que me estaba complicando demasiado. Estoy de acuerdo con @Martin Brown. No hay una respuesta simple al problema. Me gustaría crear un nuevo objeto, incluso si eso significa copiar todas las propiedades. –
@ Bruno. Estaba por comentar que tu respuesta probablemente funcionaría. Parece que la mejor manera de hacerlo es hacer que la ID sea interna: public int Id {get; conjunto interno; } De esta forma, solo el DAL podrá actualizarlo y permitir que el DAL actualice la propiedad de ID 'interna': [assembly: InternalsVisibleTo ("DAL_Assembly")] De esta forma, para el DAL, la propiedad de ID interna será actualizable . – Anthony