.net - Entity Framework 中主细节/多表插入的最佳实践/方法

标签 .net linq entity-framework linq-to-entities

我的表结构是这样的

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

我正在尝试使用以下代码使用 Entity Framework 进行插入操作
这是插入的最佳方法吗?
我对从上下文对象获取完整产品项目的方式不满意,而不能只分配一个简单的 productId 值
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();
}

这是进行主细节插入的正确方法还是有更好/另一种方法。

最佳答案

你现在正在做的事情会很好。

如果您想在分配 ode.Products 时避免执行数据库查询,则可以使用以下替代方法:

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

这更快,但可读性较差。此外,在您加载它之前,Products 属性将为空。但是对于插入,这通常是可以的。

关于.net - Entity Framework 中主细节/多表插入的最佳实践/方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1158795/

相关文章:

c# - 无法在 .Net4.0 中使用 Process.Start() 打开 excel 文件

c# - 在 C# 中使用 LINQ 从列表中选择不同的值

c# - 是否有一个 LINQ 语句可以根据其属性之一的最大值从枚举中选择一个对象?

c# - 如何在 Linq 中使用分组依据和计数

asp.net-mvc - 多对多关系上的 Entity Framework 错误

c# - 有没有一种简单的方法来获取C#(或CIL)中当前堆栈帧中的所有局部变量

c# - 调试器未附加到进程

Linq 日期和日期时间比较器

c# - 如何重写此 Linq 查询以避免使用 FirstOrDefault?

c# - EF : Potential runtime violation of table如何解决