2008-11-13 48 views
8

Tengo un escenario bastante simple en el que tengo dos tablas en las que quiero añadir datos. Se administran con clave principal/clave externa. Quiero agregar nuevos datos en la TABLA A y luego recuperar el Id e insertarlo en la TABLA B.Insertar en varias tablas de bases de datos utilizando LINQ, ASP.NET MVC

Ciertamente puedo hacerlo con un procedimiento almacenado, pero estoy tratando de hacerlo usando Linq.

¿Cuál es el mejor enfoque?

Definitivamente puedo obtener la identificación y hacer dos insertos por separado, pero eso ciertamente no parece ser una muy buena forma de hacer las cosas.

db.Table.InsertOnSubmit(dbObject); 
db.SubmitChanges(); 

Int32 id = dbOject.Id; 

//Rest of the code 

¿Alguna manera de hacer esto elegantemente?

Respuesta

13

¿Tiene usted la relación definida entre las 2 tablas relacionales en el objeto diseñado? Si es así, puede hacer que linq se encargue de asignar automáticamente la propiedad de ID de la segunda tabla.

Ejemplo ...
Tabla A - Solicitar
OrderId
OrderDate

Tabla B - Artículo de la orden
OrderItemId
OrderId
ItemId

Código (mediante LINQ-to- SQL):

Order order = new Order(); 
Order.OrderDate = DateTime.Now(); 
dataContext.InsertOnSubmit(order); 

OrderItem item1 = new OrderItem(); 
Item1.ItemId = 123; 
//Note: We set the Order property, which is an Order object 
// We do not set the OrderId property 
// LINQ will know to use the Id that is assigned from the order above 
Item1.Order = order; 
dataContext.InsertOnSubmit(item1); 

dataContext.SubmitChanges(); 
1

hi i insertar datos en tres tabla utilizando el código

Product_Table AddProducttbl = new Product_Table(); 
     Product_Company Companytbl = new Product_Company(); 
     Product_Category Categorytbl = new Product_Category(); 

     // genrate product id's 
     long Productid = (from p in Accountdc.Product_Tables 
         select p.Product_ID).FirstOrDefault(); 
     if (Productid == 0) 
      Productid++; 
     else 
      Productid = (from lng in Accountdc.Product_Tables 
         select lng.Product_ID).Max() + 1; 
     try 
     { 
      AddProducttbl.Product_ID = Productid; 
      AddProducttbl.Product_Name = Request.Form["ProductName"]; 
      AddProducttbl.Reorder_Label = Request.Form["ReorderLevel"]; 
      AddProducttbl.Unit = Convert.ToDecimal(Request.Form["Unit"]); 
      AddProducttbl.Selling_Price = Convert.ToDecimal(Request.Form["Selling_Price"]); 
      AddProducttbl.MRP = Convert.ToDecimal(Request.Form["MRP"]); 
      // Accountdc.Product_Tables.InsertOnSubmit(AddProducttbl); 
      // genrate category id's 
      long Companyid = (from c in Accountdc.Product_Companies 
           select c.Product_Company_ID).FirstOrDefault(); 
      if (Companyid == 0) 
       Companyid++; 
      else 
       Companyid = (from Ct in Accountdc.Product_Companies 
          select Ct.Product_Company_ID).Max() + 1; 

      Companytbl.Product_Company_ID = Companyid; 
      Companytbl.Product_Company_Name = Request.Form["Company"]; 

      AddProducttbl.Product_Company = Companytbl; 
      //Genrate Category id's 
      long Categoryid = (from ct in Accountdc.Product_Categories 
           select ct.Product_Category_ID).FirstOrDefault(); 
      if (Categoryid == 0) 
       Categoryid++; 
      else 
       Categoryid = (from Ct in Accountdc.Product_Categories 
           select Ct.Product_Category_ID).Max() + 1; 
      Categorytbl.Product_Category_ID = Categoryid; 
      Categorytbl.Product_Category_Name = Request.Form["Category"]; 
      AddProducttbl.Product_Category = Categorytbl; 

      Accountdc.Product_Tables.InsertOnSubmit(AddProducttbl); 
      Accountdc.SubmitChanges(); 

     } 
     catch 
     { 
      ViewData["submit Error"] = "No Product Submit"; 
     } 
Cuestiones relacionadas