Tengo un inconveniente, estoy haciendo una
aplicaci�n con EF, utilizando code first, es la primera vez que lo arranco
asi, siempre part� desde una DB y usando un edmx. pero bueno, ahora
estoy renegando! jajaa
[Required(ErrorMessage = "Debe
ingresar el Nombre del Paciente")]
[MaxLength(200)]
public string Nombre { get; set; }
[Required(ErrorMessage = "Debe
ingresar el Apellido del Paciente")]
[MaxLength(200)]
public string Apellido { get; set; }
[Required(ErrorMessage =
"Debe ingresar la Fecha de Nacimiento del Paciente")]
public
DateTime FechaNacimiento { get; set; }
[MaxLength(200)]
public string Domicilio { get; set; }
[MaxLength(200)]
public string Telefono { get; set; }
[MaxLength(200)]
public string Profesion { get; set; }
[MaxLength(200)]
public string Email { get; set; }
public string Observaciones {
get; set; }
public virtual ICollection<
MedidaAntropometrica> MedidasAntropometricas { get; set; }
[Table("MedidasAntropometricas")]
public class
MedidaAntropometrica : EntidadBase
{
[Required(ErrorMessage = "Debe ingresar una
Denominaci�n para la Medida Antropom�trica")]
[MaxLength(200)]
public string Denominacion { get; set; }
public bool Editable { get; set; }
public bool Inactivo {
get; set; }
public ICollection<Paciente> Pacientes { get;
set; }
}
Context:
public class SoftContext :
DbContext
{
public SoftContext() : base("name=SoftConnectionString") { }
public DbSet<Paciente> Pacientes { get; set; }
public DbSet<MedidaAntropometrica> MedidasAntropometricas { get;
set; }
protected override void
OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Paciente>().
HasMany(e =>
e.MedidasAntropometricas).
WithMany(e => e.Pacientes).
Map(e => e.MapLeftKey("PacienteId")
.MapRightKey("
MedidaAntropometricaId")
.ToTable("
PacientesMedidasAntropometricas"));
}
}
Mi Acceso a Datos:
public override bool
Guardar(Paciente entidad)
{
bool exito = true;
try
{
using (var context = new SoftContext())
{
context.Entry(entidad).State = entidad.Id == 0 ? EntityState.Added :
EntityState.Modified;
context.SaveChanges();
}
}
catch (InvalidOperationException
error)
{
exito = false;
throw
error;
}
catch (Exception error)
{
exito = false;
throw error;
}
return
exito;
}
Y mi c�digo de
prueba:
Paciente pacientes = new Paciente();
nuevoPaciente.Nombre = "Martin";
nuevoPaciente.Apellido =
"Comparetto";
nuevoPaciente.FechaNacimiento = new DateTime(1981, 11,
23);
nuevoPaciente.SexoId = 1;
MedidasAntropometricasCD medidas = new
MedidasAntropometricasCD();
MedidaAntropometrica medida =
medidas.Abrir(1);
nuevoPaciente.MedidasAntropometricas.Add(
medida);
PacientesCD pacientes = new PacientesCD();
bool exito
= pacientes.Guardar(nuevoPaciente);
Bien, al crear las tablas, me crea perfectamente:
- Tabla
Pacientes
- Tabla MedidasAntropometricas
- Tabla
PacientesMedidasAntropometricas
El problema
que tengo, es que al agregar un nuevo paciente, me crea correctamente los
registros en las tablas Pacientes y PacientesMedidasAntropometricas,
pero tambi�n me crea un nuevo registro en la tabla
MedidasAntropometricas... y esto no deber�a crearlo.
Cuando lo
depuro veo que esta todo bien, con los valores correctos. Pero al
ejecutar el m�todo SaveChange, me crea este nuevo registro y los
Id, me los asocia a este nuevo. Yo necesitar�a que quede asociado
al que estoy recuperando, el que ya esta en la tabla
MedidasAntropometricas.
Qu� estoy haciendo mal?
Un saludos, y muchas gracias!