Link Autoincremental ID before SaveChanges

0

I'll give you an example

I have two tables

CLOSE

CierreID
Descripcion

Entity

EntidadID
CierreID
Descripcion

At the code level I create a Closure object

Cierre a = new Cierre()

a.Descripcion = "Ejemplo"

db.Cierres.Add(a);

Now I want to assign to entity this close id that has not yet been saved in database without making a savechanges before.

Is there any way?

Greetings.

    
asked by Dario Nicolas Orazi 21.03.2018 в 19:53
source

2 answers

0

Solution:

db.Cierres.Add(a);

foreach (var item in lstEntidades)
{
db.Entidades.Add(item);
}

db.SaveChanges();

Entity detects it only.

I hope it serves you.

Greetings.

    
answered by 22.03.2018 / 15:45
source
1

I do it in these ways.

1:

var cierre = db.Cierres.Add(a); // Maestra de cierre

foreach (var item in lstEntidades)
{
     var entidadCierre = new Entidad(){
         EntidadID = item.Id,
         CierreID = cierre.Id
         Descripcion = item.Descripcion
     }
    db.Entidades.Add(entidadCierre);
}

db.SaveChanges();

2: Use this method to add and return the Inserted Id

public async Task<int> AddCierre(Cierre newCierre)
{
   try
     {
       var cierre = _context.Cierres.Add(newCierre);
       await _context.SaveChangesAsync();
       return cierre.Id;
     }
   catch (Exception ex)
     {
        throw ex;
     }
}

Driver

public async Task<ActionResult> Nuevo(RolViewModel model)
{
    var newCierre = new Cierre(); // Armar según tu necesidad
    int cierreId = await AddCierre(newCierre); // Id retornado solo quedaría insertar las relaciones con este Id

    using (var db = new DbContext())
    {
       foreach (var item in lstEntidades)
       {
           var entidadCierre = new Entidad(){
              EntidadID = item.Id,
              CierreID = cierreId,
              Descripcion = item.Descripcion
           }
           db.Entidades.Add(entidadCierre);
        }
        db.SaveChanges();
     }
}

I hope you serve them

    
answered by 22.03.2018 в 14:18