相关疑难解决方法(0)

实体框架查询速度慢,但SqlQuery中的SQL速度相同

我看到一些与使用.NET框架版本4的Entity Framework Code-First的非常简单的查询相关的一些非常奇怪的性能.LINQ2Entities查询如下所示:

 context.MyTables.Where(m => m.SomeStringProp == stringVar);
Run Code Online (Sandbox Code Playgroud)

这需要超过3000毫秒才能执行.生成的SQL看起来非常简单:

 SELECT [Extent1].[ID], [Extent1].[SomeStringProp], [Extent1].[SomeOtherProp],
 ...
 FROM [MyTable] as [Extent1]
 WHERE [Extent1].[SomeStringProp] = '1234567890'
Run Code Online (Sandbox Code Playgroud)

在通过Management Studio运行时,此查询几乎立即运行.当我更改C#代码以使用SqlQuery函数时,它在5-10毫秒内运行:

 context.MyTables.SqlQuery("SELECT [Extent1].[ID] ... WHERE [Extent1].[SomeStringProp] = @param", stringVar);
Run Code Online (Sandbox Code Playgroud)

因此,完全相同的SQL,在两种情况下都会对结果实体进行更改跟踪,但两者之间存在差异.是什么赋予了?

performance entity-framework ef-code-first

83
推荐指数
3
解决办法
5万
查看次数

在SQLDataReader上使用

我知道我之前提过了一个相关的问题.我只是想到了另一个想法.

using (SqlConnection conn = new SqlConnection('blah blah'))
{
    using(SqlCommand cmd = new SqlCommand(sqlStatement, conn))
    {
        conn.open();

        // *** do I need to put this in using as well? ***
        SqlDataReader dr = cmd.ExecuteReader() 
        {
            While(dr.Read())
            {
                //read here
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

参数是:由于SqlDataReader dr对象不是一个新的对象,如连接或命令对象,它只是一个指向cmd.ExecuteReader()方法的引用,我是否需要将阅读器放在一个using.(现在基于我以前的帖子,我的理解是任何使用的对象IDisposable需要放入using,并SQLDataReader继承IDisposable,所以我需要把它.我的判断是否正确?)我只是困惑,因为它不是一个新的对象,它会在处理一个只是命令的引用指针的对象时引起任何问题吗?

非常感谢

c# dispose sqldatareader using-statement

11
推荐指数
1
解决办法
2万
查看次数

在实体框架中将字符串转换为FormattableString

我正在尝试使用 ASP.NET API 构建一个容易受到 SQL 注入攻击(用于教育目的)的网站。为此,我想FromSql使用之前准备好的 SQL 查询进行调用,如下所示:

String query = "SELECT * FROM users WHERE email = '"+email
                  +"' AND password = '"+password+"'";
return RepositoryContext.Users.FromSql(query).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

但这段代码不会像FromSql预期的那样编译FormattableString,而不是 a String。我收到以下错误消息:

错误 CS1503 参数 2:无法从“string”转换为“System.FormattableString”

下面的代码可以编译,但是此代码将不再容易受到 SQL 注入的攻击,因为实体框架将执行准备好的 SQL 查询并将电子邮件和密码转换为 SQL 查询参数:

return RepositoryContext.Users.FromSql(
   $"SELECT * FROM users WHERE email = {email} 
                           AND password = {password}").FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

有没有办法将 a 转换String为 a FormattableString

感谢您的帮助。

c# entity-framework asp.net-web-api formattablestring

7
推荐指数
2
解决办法
4409
查看次数

VB.Net到C#的转换<sql> </ sql>

这在VB.Net中工作

Dim sSQL As String
sSQL = <sql>MySQLQueryHere</sql>.Value
Run Code Online (Sandbox Code Playgroud)

但是,这在C#中不起作用

string sSQL = "";
sSQL = <sql>MySQLQueryHere</sql>.Value;
Run Code Online (Sandbox Code Playgroud)

以下部分显示了构建后的错误。

    sSQL = <sql>MySQLQueryHere</sql>.Value;
Run Code Online (Sandbox Code Playgroud)

关于我在做什么错的任何建议吗?

c# vb.net c#-to-vb.net vb.net-to-c# vb.net-2010

1
推荐指数
1
解决办法
118
查看次数