这是关于具体情况的一些主观问题.这个问题的主要目标是提醒我自己编写解决方案的代码.但是,如果已经有解决方案或替代方法,我想知道它.
我正在开发一个项目,我正在使用Entity Framework 4进行数据库访问.数据库设计是我无法控制的.该数据库是多年前设计的,在我看来,数据库设计不适合当前的数据库目的.这导致非常复杂的查询.
这是我第一次在项目中使用Entity Framework,但我在针对MS SQL Server的开发方面拥有丰富的经验.
我发现自己一次又一次地做的是:
说实话,我开始认为如果你不拥有数据库设计就不应该使用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) 我希望我的Web应用程序的所有登录尝试都花费不少于1秒,以使暴力攻击不太可行.如果我在我的代码中添加这样的内容:
Thread.Sleep(1000)
Run Code Online (Sandbox Code Playgroud)
我希望我容易受到一个非常简单的ddos攻击:只需向网站发出几十个登录请求,就会发生线程池饥饿.(我不相信Thread.Sleep会将线程返回给线程池,是吗?)
实现此功能的正确方法是什么?
在你开始批评并指出我的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) 我一直在阅读Eric Lippert关于C#编译器的/ optimize命令行选项的文章.本文描述了编译器执行的优化类型.但是,如果此选项也影响JIT优化,我仍然不清楚.这个选项会让编译器发出一些元数据,而这种抖动可以理解为改变"优化模式",这并非不可想象.是否有任何参考可以确认,或者如果此选项确实影响JITter?
我决定熟悉node.js并阅读了几篇关于这个主题的文章.我还不清楚的是,当您调用node.js函数时,node.js是否在线程池中创建新线程和/或调度线程池上的任务.
例如,如果我调用fs.readFile它是在另一个线程上执行的?
如果是,[how]我可以编写自己的函数readFileCustomized还是doLongOperation在不同的线程上运行?
我想知道什么时候刷一个项目ListView(与标准选择相比)
该ListView有一个IsSwipeEnabled属性,它开启/关闭刷卡动画,但我似乎无法弄清楚如何检测,当一个项目实际上是刷卡,也可以找到,这似乎提供此的任何事件.
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 …
我试图从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)
但运行时的结果是默认值: 运行时图片
我想知道它为什么会发生,我该怎么做呢,
谢谢
当你做dotnet restore.net核心显然下载nuget包.但我找不到.net核心的nuget命令行实用程序(有一个用于单声道,但我不是在那之后).
那么如何让nuget在Linux上使用.net core命令行工作(显然在包恢复之外,开箱即用).
考虑以下代码:
$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 /问题?
c# ×5
.net ×4
.net-core ×1
asp.net ×1
asp.net-mvc ×1
compilation ×1
debugging ×1
expression ×1
json ×1
json.net ×1
linux ×1
node.js ×1
nuget ×1
powershell ×1
vb.net ×1
windows-8 ×1
winrt-xaml ×1
xaml ×1