小编And*_*ykh的帖子

调试实体框架查询

这是关于具体情况的一些主观问题.这个问题的主要目标是提醒我自己编写解决方案的代码.但是,如果已经有解决方案或替代方法,我想知道它.

我正在开发一个项目,我正在使用Entity Framework 4进行数据库访问.数据库设计是我无法控制的.该数据库是多年前设计的,在我看来,数据库设计不适合当前的数据库目的.这导致非常复杂的查询.

这是我第一次在项目中使用Entity Framework,但我在针对MS SQL Server的开发方面拥有丰富的经验.

我发现自己一次又一次地做的是:

  • 我写了一个复杂的L2E查询.查询要么慢,要么返回错误的结果
  • 我正在查看我的L2E查询,我完全不知道如何改进它
  • 我启动SQL事件探查器并捕获从我的查询生成的EF
  • 我想执行该部分SQL以识别出问题的查询部分
  • 查询以带有十几个参数的sp_executesql形式出现,因为如果在查询中使用了3次参数,则L2E会创建3个参数并将所有参数传递给相同的值.每个参数都相同.
  • 现在我必须从sp_executesql中提取SQL,unescape所有转义的撇号,并用其值替换查询中的每个参数
  • 完成此操作后,我终于可以运行部分查询并精确定位问题.
  • 我回到我的L2E代码,更改它以解决我发现的问题并重复循环.

说实话,我开始认为如果你不拥有数据库设计就不应该使用ORM.

除此之外,unescaping sql和替换参数的过程是我想要自动化的过程.我的目标是获得"裸",去参数化的sql,我可以在SSMS中运行.

这是我在配置文件中看到的以及我想要获得的结果的一个非常简单的示例.我的真实情况要复杂很多倍.

捕获:

exec sp_executesql N'SELECT 
[Extent1].[ProductName] AS [ProductName]
FROM  [dbo].[Products] AS [Extent1]
INNER JOIN [dbo].[Categories] AS [Extent2] ON [Extent1].[CategoryID] = [Extent2].[CategoryID]
WHERE ([Extent1].[UnitPrice] > @p__linq__0) AND ([Extent2].[CategoryName] = @p__linq__1) AND (N''Chang'' <> [Extent1].[ProductName])',N'@p__linq__0 decimal(1,0),@p__linq__1 nvarchar(4000)',@p__linq__0=1,@p__linq__1=N'Beverages'
Run Code Online (Sandbox Code Playgroud)

期望的结果:

SELECT 
[Extent1].[ProductName] AS [ProductName]
FROM  [dbo].[Products] AS [Extent1]
INNER JOIN [dbo].[Categories] AS [Extent2] ON [Extent1].[CategoryID] = [Extent2].[CategoryID]
WHERE ([Extent1].[UnitPrice] > …
Run Code Online (Sandbox Code Playgroud)

debugging entity-framework entity-framework-4

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

如何在ASP.NET MVC应用程序中强制密码检查延迟?

我希望我的Web应用程序的所有登录尝试都花费不少于1秒,以使暴力攻击不太可行.如果我在我的代码中添加这样的内容:

Thread.Sleep(1000)
Run Code Online (Sandbox Code Playgroud)

我希望我容易受到一个非常简单的ddos攻击:只需向网站发出几十个登录请求,就会发生线程池饥饿.(我不相信Thread.Sleep会将线程返回给线程池,是吗?)

实现此功能的正确方法是什么?

c# asp.net asp.net-mvc

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

使用非常量表达式切换语句 - 扩展C#/ IDE能力

在你开始批评并指出我的C#规范的 §8.7.2之前,请仔细阅读:)

我们都知道C#中的switch是怎样的.好的,请考虑MainWindow使用"讨厌的" Bar方法

static int barCounter = 0;
public static int Bar()
{
    return ++barCounter;
}
Run Code Online (Sandbox Code Playgroud)

在这个类的某个地方,我们有这样的代码

Action switchCode = () =>
{
    switch (Bar())
    {
        case 1:
            Console.WriteLine("First");
            break;
        case 2:
            Console.WriteLine("Second");
            break;
    }
};

switchCode();

switchCode();
Run Code Online (Sandbox Code Playgroud)

在控制台窗口中,我们将看到

First
Second
Run Code Online (Sandbox Code Playgroud)

在C#中使用表达式我们也可以这样做 - 编写相同的代码

var switchValue = Expression.Call(typeof(MainWindow).GetMethod("Bar"));

var WriteLine = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(String) });

var @switch = Expression.Switch(switchValue,
    Expression.SwitchCase(
        Expression.Call(WriteLine, Expression.Constant("First")),
        Expression.Constant(1)
        ),
    Expression.SwitchCase(
        Expression.Call(WriteLine, Expression.Constant("Second")),
        Expression.Constant(2)
        )
    );

Action switchCode = …
Run Code Online (Sandbox Code Playgroud)

.net c# compiler-construction expression switch-statement

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

C#编译器/优化命令行选项会影响JITter吗?

我一直在阅读Eric Lippert关于C#编译器的/ optimize命令行选项的文章.本文描述了编译器执行的优化类型.但是,如果此选项也影响JIT优化,我仍然不清楚.这个选项会让编译器发出一些元数据,而这种抖动可以理解为改变"优化模式",这并非不可想象.是否有任何参考可以确认,或者如果此选项确实影响JITter?

c# compilation

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

node.js是否在内部使用线程/线程池?

我决定熟悉node.js并阅读了几篇关于这个主题的文章.我还不清楚的是,当您调用node.js函数时,node.js是否在线程池中创建新线程和/或调度线程池上的任务.

例如,如果我调用fs.readFile它是在另一个线程上执行的?

如果是,[how]我可以编写自己的函数readFileCustomized还是doLongOperation在不同的线程上运行?

multithreading node.js

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

检测ListView中何时刷新项目

我想知道什么时候刷一个项目ListView(与标准选择相比)

该ListView有一个IsSwipeEnabled属性,它开启/关闭刷卡动画,但我似乎无法弄清楚如何检测,当一个项目实际上是刷卡,也可以找到,这似乎提供此的任何事件.

.net c# xaml windows-8 winrt-xaml

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

如何比较 Vb.Net 中的可空值?

C# 很简单。如果您有以下代码,则不会有任何意外:

static void Main(string[] args)
{
    Console.WriteLine(Test(null, null,null,null));
}
static bool Test(int? firstLeft, int? firstRigt, int? secondLeft, int? secondRight)
{
    return firstLeft == firstRigt && secondLeft == secondRight;
}
Run Code Online (Sandbox Code Playgroud)

显然True将作为结果打印。让我们尝试在 VB 中做这样的事情:

Sub Main()
    Console.WriteLine(Test(Nothing,Nothing,Nothing,Nothing))
End Sub

Function Test(FirstLeft As Integer?, FirstRight As Integer?, SecondLeft As Integer?, SecondRight As Integer?) As Boolean
    Return FirstLeft = FirstRight AndAlso SecondLeft = SecondRight
End Function
Run Code Online (Sandbox Code Playgroud)

你能猜到会是什么结果吗?True? 错误的。False? 错误的。结果将是InvalidOperationException。

那是因为可空比较结果的类型不是Boolean,而是Boolean?。这意味着当您比较两侧的你有Nothing …

.net vb.net

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

使用ToObject方法反序列化Json会导致默认属性值

我试图从JObject创建一个.NET对象,但我得到Object的所有属性作为默认值(对于字符串为null,对于int等为0)

我正在创建一个简单的Jobject:

var jsonObject = new JObject();
jsonObject.Add("type", "Fiat");
jsonObject.Add("model", 500);
jsonObject.Add("color", "white");
Run Code Online (Sandbox Code Playgroud)

汽车类是:

public class Car
{
  string type {get;set;}
  int model {get ;set;}
  string color {get;set;}            
}
Run Code Online (Sandbox Code Playgroud)

反序列化在这里:

Car myCar = jsonObject.ToObject<Car>();
Run Code Online (Sandbox Code Playgroud)

但运行时的结果是默认值: 运行时图片

我想知道它为什么会发生,我该怎么做呢,

谢谢

.net c# json json.net

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

Nuget for .net core on linux

当你做dotnet restore.net核心显然下载nuget包.但我找不到.net核心的nuget命令行实用程序(有一个用于单声道,但我不是在那之后).

那么如何让nuget在Linux上使用.net core命令行工作(显然在包恢复之外,开箱即用).

linux nuget .net-core

5
推荐指数
2
解决办法
4572
查看次数

自动数组包装/解包的规则是什么?

考虑以下代码:

$a = '[{"a":"b"},{"c":"d"}]'
"Test1"
$a | ConvertFrom-Json | ForEach-Object { $_.GetType() }
"Test2"
$b = $a | ConvertFrom-Json
$b | ForEach-Object { $_.GetType() }
Run Code Online (Sandbox Code Playgroud)

这会产生以下输出:

Test1

IsPublic IsSerial Name                                     BaseType                                                                                                                           
-------- -------- ----                                     --------                                                                                                                           
True     True     Object[]                                 System.Array                                                                                                                       
Test2
True     False    PSCustomObject                           System.Object                                                                                                                      
True     False    PSCustomObject                           System.Object  
Run Code Online (Sandbox Code Playgroud)

显然,如果我们使用临时变量,那么传递给管道的任何东西与我们不使用它时传递的东西不同.

我想知道powershell用于自动数组包装/解包的规则是什么,如果我们需要迭代json数组,如果使用temp var是最好的操作方法.

更新1 逻辑上ConvertFrom-Json应该返回一个给定输入的数组,并且ForEach-Object应该在所述数组上迭代.然而,在第一次测试中,这不会发生.为什么? 更新2 它是否可能ConvertFrom-Json具体?喜欢bug /问题?

powershell

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