【发布时间】:2016-04-05 14:30:34
【问题描述】:
我正在使用 Entity Framework,但我对性能有疑问。
这是我的 linq add 方法:
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 等所有条件下是否更快?
【问题讨论】:
-
这将取决于您在实体框架下使用的 实际 RDBMS - 但如果您这样做,对于 SQL Server,我认为性能会非常好可比。这两种方法最终都会导致需要执行的参数化查询 - 如果执行得当,两种方法的行为都会非常相似。
-
但要注意一点:为什么你使用
nvarchar(max)作为你的图像!?!?!?这是一组 二进制 数据 - 最好使用varbinary(max)(而不是基于字符串的数据类型) -
它保存图像的路径,因此它不是二进制数据集,感谢您的回复,这是我正在寻找的答案:) @marc_s
-
EF 有一些开销,但是像这样的插入甚至不值得测量(如果有很多插入,您既不会使用 EF 也不会使用类似的过程进行批量操作) - 该过程与使用普通的动态 SQL 没有什么不同)。
标签: c# performance entity-framework linq stored-procedures