使用Linq插入到多个数据库表中,ASP.NET MVC

问题描述:

我有一个相当简单的场景,我有两张表,我想在其中添加数据。它们使用主键/外键进行管理。我想添加新的数据到表A中,然后检索Id并插入到表B.使用Linq插入到多个数据库表中,ASP.NET MVC

我当然可以用存储过程来做,但我正在试图使用Linq来做。

什么是最好的方法?

我当然可以得到ID并做两个单独的插入,但这似乎不是一个很好的做事方式。

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

Int32 id = dbOject.Id; 

//Rest of the code 

任何方式来优雅地做到这一点?

您是否在对象关系中的两个表之间定义了关系?如果是这样,你可以让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(); 

您好我使用此代码

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"; 
     } 
数据插入到三个表