Linq方法添加与存储过程添加

时间:2016-04-05 14:30:35

标签: c# performance entity-framework linq stored-procedures

我正在使用实体框架,我对性能有疑问。

这是我的linq添加方法:

CarTable newCar = new CarTable()
            {
                CarPlate = plate,
                CarModel = model,
                CarColor = color,
                CarImage = image
            };

entity.CarTable.Add(newCar);
entity.SaveChanges();

这是一个用于相同目的的存储过程:

CREATE PROC prCreateCar
    (@plate NVARCHAR(20), 
     @model NVARCHAR(50), 
     @color NVARCHAR(10), 
     @image NVARCHAR(MAX))
AS
BEGIN
     INSERT INTO CarTable
     VALUES (@plate, @model, @color, @image)
END

用asp.net调用它:

entity.prCreateCar('34 F5 3498','Renault Clio','Blue','Images/Cars/clio.png');

他们两个都工作正常,但这是我的问题..哪一个提供更好的表现?我听说存储过程更快但是这是真的吗?如果是真的,它在SELECT,DELETE,UPDATE和INSERT等所有条件下都会更快吗?

1 个答案:

答案 0 :(得分:0)

对于这样简单的查询,可能会有很大的不同。如果你有更复杂的查询(连接许多不同的表/子查询/等)只是使用不同的参数,存储过程的性能通常会更好,因为数据库只需要创建一次执行计划然后可以缓存它,同时它将为每个常规SQL查询重新创建。

如果你必须连续进行大量插入,例如从外部源(目录数据或类似的东西)导入数据时,您可能希望使用BULK INSERT语句。还有EF的扩展允许以类似于常规EF操作的方式使用该功能 - 尽管我没有实际经验。一个例子是EntityFramework.BulkInsert