He estado repasando los tutoriales (específicamente los que usan Linq-To-Entities) y entiendo los conceptos básicos, sin embargo, algunas cosas me están dando problemas.¿Mi aplicación ASP.NET MVC está estructurada correctamente?
Los tutoriales generalmente solo incluyen modelos simples y formularios que solo utilizan instrucciones básicas de creación, actualización y eliminación. Los míos son un poco más complicados, y no estoy seguro de estar haciendo esto correctamente porque cuando llega el momento de manejar las relaciones de media docena de objetos de base de datos, los tutoriales dejan de ayudar.
Para el método POST, la forma habitual de realizar operaciones CRUD
entities.AddToTableSet(myClass);
entities.SaveChanges();
no hará lo que yo quiero, porque una clase totalmente implementado no está siendo publicado en el método de controlador. Puedo publicar campos individuales, colecciones de formularios o múltiples objetos DTO y luego llamar a un método en un servicio o repositorio para tomar la información que recibo de una publicación de formulario, junto con la información que necesita para consultar o crearse a sí misma, y luego de todas esas cosas, crea mi objeto de base de datos que puedo guardar.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(int id, [Bind(Exclude = "Id")] ClassA classA,
[Bind(Exclude = "Id")]ClassB classB)
{
// Validation occurs here
if(!ModelState.IsValid)
return View();
try
{
_someRepositoryOrService.Add(id, classA, classB);
return RedirectToAction("Index", new { id = id });
}
catch(Exception ex)
{
// Logging and exception handling occurs here
}
}
public void Add(int id, ClassA classA, ClassB classB)
{
EntityA eA = new EntityA
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
EntityB eB = new EntityB
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
_entity.AddToEntityASet(eA);
_entity.AddToEntityBSet(eB);
_entity.SaveChanges();
}
¿Estoy manejando esto correctamente o estoy bastardizando el marco? En realidad, nunca uso un objeto de entidad directamente, cada vez que consulto uno, pongo la información que necesito en un DTO y baso mis Views en eso. Lo mismo ocurre con la creación. ¿Esto está permitido o mi evitación de usar entidades va directamente en contra del propósito de usar el marco?
Editar: Yo también estoy preocupado por este enfoque, ya que requiere constructores vacíos que hacer correctamente las consultas LINQ a causa de este mensaje de error:
Solamente los constructores sin parámetros y inicializadores son compatibles en LINQ a Entidades .
Esto no es un gran problema, ya que rara vez necesito la lógica en los constructores, pero ¿es un problema no tener constructores y solo propiedades públicas?
El objetocontext utilizado por Linq to Entities utiliza la reflexión para crear objetos a partir de la asignación de datos, por lo que es importante y requiere que todas las entidades tengan un constructor sin parámetros para que pueda inicializarse y si desea serializar sus tipos Necesitaré un constructor público también – dmportella