best practise/way for master detail / multi table Insert in Entity Framework

.net, entity-framework, linq, linq-to-entities

Solution

What you are doing now will work just fine.

If you would like to avoid doing a database query when assigning ode.Products, then you could use the following alternative:

// substitute your actual qualified entity set name
ode.ProductsReference.EntityKey = 
    new EntityKey("MyEntities.ProductsEntitySetName", "Id", 2);

This is faster, but less readable. Also, the Products property will be null until you Load it. But for an insert, this is often OK.

Problem

My table structure is this ``` Orders ------ Id int identity OrderDate smalldatetime OrderStatusid tinyint Products -------- Id int identity Name varchar(50) OrderDetails ------------ Id int identity OrderId int (fkey) ProductId int (fkey) Amount decimal Rate decimal ``` I am trying to an insert operation using Entity Framework using the code below Is this the best way to do the insert? I am not happy with the way I am getting the full product item from the context object, instead of being able to just assign a simple productId value ``` using (MyContextEntities ctx = new MyContextEntities()) { Orders newOrder = new Orders() { Name = "Gayle Wynand", OrderDate = DateTime.Now, IsComplete = true, Comments = "test", OrderStatusId = 2, IsActive = true }; OrderDetails ode = new OrderDetails(); ode.Products = ctx.Products.First(p => p.Id == 2); // any other way? ode.Quantity = 2; ode.Rate = 5.2; newOrder.OrderDetails.Add(ode); OrderDetails ode2 = new OrderDetails(); ode2.Products = ctx.Products.First(p => p.Id == 3); // any other way? ode2.Quantity = 3; ode2.Rate =6.5; newOrder.OrderDetails.Add(ode2); ctx.AddToOrders(newOrder); ctx.SaveChanges(); } ``` Is this the correct way to do the master detail insert or is there a better/another way.

Original source