-
-
Notifications
You must be signed in to change notification settings - Fork 53
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Create parameterized queries #24
Comments
Hi, Does this query translate to a parameterized Sql query using SqlServer provider? dbContext.Blogs.Where( Param_0 => Param_0.Title == "action") The thing is gridify doesn't control the provider's behavior. if you have a filter like |
I did some research and few tests. the behavior of the Native LINQ and gridify generated expression is the same in SqlServer Provider. // using SqlServer provider
[Fact]
public void ApplyFiltering_GeneratedSqlShouldMatch_SqlServerProvider()
{
var actual = _dbContext.Users.ApplyFiltering("name = vahid").ToQueryString();
var expected = _dbContext.Users.Where(q => q.Name == "vahid").ToQueryString();
Assert.Equal(expected , actual);
} SELECT [u].[Id], [u].[CreateDate], [u].[FkGuid], [u].[Name]
FROM [Users] AS [u]
WHERE [u].[Name] = N'vahid' according to this test, the question is, does even this feature you mentioned exist in Entity Framework ?! if yes, how we can use it because looks like we can not use it even with Native LINQ., did I missed something? |
Never mind, I found the parameterized way to do this in LINQ. [Fact]
public void ApplyFiltering_GeneratedSqlShouldMatch_UsingVariable_SqlServerProvider()
{
var name = "vahid";
var actual = _dbContext.Users.ApplyFiltering("name = vahid").ToQueryString();
var expected = _dbContext.Users.Where(q => q.Name == name).ToQueryString();
Assert.Equal(expected , actual);
} DECLARE @__name_0 nvarchar(4000) = N'vahid';
SELECT [u].[Id], [u].[CreateDate], [u].[FkGuid], [u].[Name]
FROM [Users] AS [u]
WHERE [u].[Name] = @__name_0 I never encountered any best practices in the entity framework that says you should always define at least a variable for your constant values! |
This feature is available in version GridifyGlobalConfiguration.EnableEntityFrameworkCompatibilityLayer(); e.g _dbContext.Users.ApplyFiltering("name = vahid") when EntityFrameworkCompatibilityLayer is enable the output is DECLARE @__Value_0 nvarchar(4000) = N'vahid';
SELECT [u].[Id], [u].[CreateDate], [u].[FkGuid], [u].[Name]
FROM [Users] AS [u]
WHERE [u].[Name] = @__Value_0 |
This library in-lines the field's values in EF-Core queries. For instance it creates queries like this:
For performance reasons (caching the query plan by SQL Server) it's better to create parameterized queries such as:
The text was updated successfully, but these errors were encountered: