2008-11-13 66 views
8

我有一個相當簡單的場景,我有兩張表,我想在其中添加數據。它們使用主鍵/外鍵進行管理。我想添加新的數據到表A中,然後檢索Id並插入到表B.使用Linq插入到多個數據庫表中,ASP.NET MVC

我當然可以用存儲過程來做,但我正在試圖使用Linq來做。

什麼是最好的方法?

我當然可以得到ID並做兩個單獨的插入,但這似乎不是一個很好的做事方式。

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

Int32 id = dbOject.Id; 

//Rest of the code 

任何方式來優雅地做到這一點?

回答

13

您是否在對象關係中的兩個表之間定義了關係?如果是這樣,你可以讓linq自動分配第二個表的ID屬性。

實施例...
表A - 訂單
的OrderId
訂購日期

表B - 訂單項目
OrderItemId
的OrderId
項目Id

代碼(使用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

您好我使用此代碼

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"; 
     } 
數據插入到三個表
相關問題