Estoy intentando descubrir cómo abordar este problema. Tengo que insertar algunos datos en las tablas 2 a cuadros A y B. Deja llamada¿Debería un repositorio llamar a otro repositorio? ¿O debería un repositorio llamar a una capa de servicio?
Table A has these columns
AId<PK>
A1
A2
A3
Table B has
AId<PK>
A1
B2
B3
B4
Ahora mi primera pregunta fue otro repositorio debe llamar a otro repositorio? No creo que esto resuelva mi problema actual, pero solo quiero saber esto para futuras referencias.
Ahora en mi problema.
cuando llamo a create en mi capa de repositorio (TableARepository) para Crear la Tabla A. Creo también los campos para tableB también.
// linq to sql.
TableA myATable = new TableA();
dbContext.myATable.A1 = "hi"; // all these values would come from parameters.
dbContext.myATable.A2 = "bye";
dbContext.myATable.A3 = "go";
dbContext.myATable.insertOnSubmit(TableA);
dbContext.SubmitChanges();
TableB myBTable = new TableB();
dbContext.myBTable.AId = myATable.AId;
dbContext.myBTable.A1 = myATable.A1;
dbContext.myBTable.B2 = "2";
dbContext.myBTable.B3 = "3";
dbContext.myBTable.B4 = "4";
dbContext.myATable.insertOnSubmit(TableB);
dbContext.SubmitChanges();
así que creo que está muy bien y no creo que tendría que llamar repositorio myBTable (para crear TableB) para éste y una capa de servicio.
Ahora aquí está el problema. La tabla TableB solo debe tener la información insertada en esta tabla si y solo si no es igual a "hola".
so param1 != "hi" // insert
param1 == "hi" // ignore and only insert table A
por lo que esto significaría que tendría que envolver mi TableB como esto
if(param1 != "hi")
{
TableB myBTable = new TableB();
dbContext.myBTable.AId = myATable.AId;
dbContext.myBTable.A1 = myATable.A1;
dbContext.myBTable.B2 = "2";
dbContext.myBTable.B3 = "3";
dbContext.myBTable.B4 = "4";
dbContext.myATable.insertOnSubmit(TableB);
dbContext.SubmitChanges();
}
Ahora no estoy seguro de si debería estar haciendo esto aquí, ya que esto parece casi como la lógica de negocio. sin embargo, al mismo tiempo, no estoy seguro de cómo hacer esta lógica comercial, ya que de todas formas, aún tengo que pasar el valor para insertar en el método create, incluso si es nulo (A1 es un campo que puede ser anulado).
Así que debería llamar al paso de capa de servicio tableB en el TableA.Id, A1 y verificar qué es A1. Si es bueno, vaya al repositorio de TableB e insértelo de esa forma.
Por lo tanto TableARepostiory -> TableB service layer -> TableBRepository (si se encuentra que ese valor! = "Hola").
Así que no estoy seguro de qué hacer.
Ya siempre me preguntaba sobre eso, ya que todos los ejemplos que he visto son tan pequeños que parecía que hacían un repositorio por mesa. Supongo que ahora sé para el futuro. Supongo que tendré que tener un poco de lógica por ahora, ya que no voy a redireccionar todo para solucionarlo. Ahora no de todos modos. – chobo2