Вставить в несколько таблиц базы данных, используя Linq, ASP.NET MVC - PullRequest
8 голосов
/ 13 ноября 2008

У меня довольно простой сценарий, когда у меня есть две таблицы, в которые я хочу добавить данные. Они управляются с помощью первичного ключа / внешнего ключа. Я хочу добавить новые данные в таблицу A, а затем получить идентификатор и вставить в таблицу B.

Конечно, я могу сделать это с помощью хранимой процедуры, но я пытаюсь сделать это с помощью Linq.

Каков наилучший подход?

Я, конечно, могу получить ID и сделать две отдельные вставки, но это, безусловно, не очень хороший способ сделать что-то.

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

Int32 id = dbOject.Id;

//Rest of the code

Есть ли способ элегантно сделать это?

Ответы [ 2 ]

13 голосов
/ 24 ноября 2008

Есть ли у вас отношения, определенные между двумя таблицами в объектно-реляционном дизайне? Если это так, вы можете попросить linq позаботиться о автоматическом присвоении свойства ID второй таблицы.

Пример ...
Таблица A - Заказ
OrderId
OrderDate

Таблица B - Позиция заказа
OrderItemId
OrderId
ItemId

Код (с использованием 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 голос
/ 21 июля 2011

привет, я вставляю данные в три таблицы, используя этот код

  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";
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...