2008-11-13 19 views
8

Veri eklemek istediğim iki tabloya sahip olduğum oldukça basit bir senaryo var. Birincil anahtar/yabancı anahtar ile yönetilirler. TABLO A'ya yeni veri eklemek ve daha sonra Kimliği almak ve TABLO B'ye eklemek istiyorum.Linq, ASP.NET MVC kullanarak çoklu veritabanı tablolarına ekle

Bunu saklı bir prosedürle yapabilirim, ancak bunu Linq kullanarak yapmaya çalışıyorum.

En iyi yaklaşım nedir?

Kimliğe kesinlikle sahip olabilirim ve iki ayrı ek eklerim ama bu kesinlikle bir şeyler yapmanın çok iyi bir yolu gibi görünmüyor.

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

Int32 id = dbOject.Id; 

//Rest of the code 

zarif Bunu yapmanın bir yolu?

cevap

13

Nesne ilişkisel tasarımında 2 tablo arasında tanımlanan ilişki var mı? Eğer öyleyse, linq'in ikinci tablonun ID özelliğini otomatik olarak atayarak ilgilenmesini sağlayabilirsiniz.

Örnek ...
Tablo A - Sipariş
OrderId
OrderDate

Tablo B - Sipariş Ürün
OrderItemId
OrderId
ItemId

Kodu (kullanma 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

Merhaba, bu kodu kullanarak üç tabloya veri ekledim

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"; 
     }