小编Joe*_*nos的帖子

防止Visual Studio代码中的自动完成

我正在使用新的Visual Studio Code,它显然尚未准备好黄金时段,但我希望能解决我遇到的问题.

在SQL文件中,无论何时键入case,它都会自动添加end,就像您正在构建case块一样.即使你在评论中,或者Case作为单词的一部分使用(例如select CaseID from...).我想完全禁用所有这些废话,因为它不能很好地为我自动完成任务.

我能找到的唯一配置选项,我已经设置:

"editor.autoClosingBrackets": false,
"editor.suggestOnTriggerCharacters": false,
Run Code Online (Sandbox Code Playgroud)

关于如何阻止这个的任何其他想法?

编辑:也适用于begin(它增加end)的东西,我相信更多.

visual-studio-code

69
推荐指数
9
解决办法
4万
查看次数

使用ReSharper和Productivity Power Tools在VS2010中使用TODO注释字体颜色

我刚刚为Visual Studio 2010安装了Productivity Power Tools.我也安装了ReSharper.在PowerTools安装之前,我的TODO注释(即// TODO: Do Something)在代码中显示使用VS选项下列出的字体为"Resharper Todo Item".现在它是深蓝色,显然忽略了VS选项中的设置.

我使用的是黑暗主题,所以我几乎无法阅读这些评论.我已经挖掘了我能找到的所有选项(VS选项中的所有选项,包括新的电动工具选项,以及ReSharper选项),并且找不到它.

有什么想法吗?

resharper visual-studio productivity-power-tools

52
推荐指数
4
解决办法
1万
查看次数

索引是否与"IN"子句一起使用

如果我有这样的查询:

Select EmployeeId 
From Employee 
Where EmployeeTypeId IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)

我在该EmployeeTypeId字段上有索引,SQL服务器是否仍然使用该索引?

sql indexing

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

忽略TransactionScope以进行特定查询

我正在寻找一种在TransactionScope处于活动状态时执行查询的方法,并忽略TransactionScope - 基本上,我想执行此特定查询,无论如何.

我使用EF代码优先,以及应用程序的设计方式,一个新的数据上下文贯穿单个呼叫多次打开,每一个都有自己的变化,所有这些都包含在一个单一的TransactionScope,这已经内Complete()称为最后假设没有失败.在上下文中我们已经重写,SaveChanges以便如果发生任何异常base.SaveChanges(),我们可以捕获它并在回滚事务之前登录到数据库.

由于在SaveChanges事务内部发生,因此记录显然不会发生,因为它属于与原始调用相同的事务.我试图完全忽略TransactionScope的日志代码.

这是一些精简代码:

// From the context
public override int SaveChanges() {
    try {
        return base.SaveChanges();
    } catch (Exception ex) {

        // Writes to the log table - I want this to run no matter what
        LogRepo.Log(/*stuff to log from the context*/);

        throw;
    }
}

// Inside the business logic
public void DoSomething() {
    try {
        using (var scope = new TransactionScope()) {

            using (var context = new FooContext()) …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework transactions transactionscope entity-framework-5

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

从具有多个结果集的存储过程中检索数据

给定SQL Server中有多个select语句的存储过程,有没有办法在调用过程时单独使用这些结果?

例如:

alter procedure dbo.GetSomething
as
begin
    select * from dbo.Person;
    select * from dbo.Car;
end;
Run Code Online (Sandbox Code Playgroud)

在.NET中,如果我调用此proc,我可以使用a SqlDataReader在两个结果集之间移动,这样我就可以轻松检索所有人和汽车.但是在SQL中,当我直接执行proc时,我得到两个结果集.

如果我打电话:

insert @myTempTable
    exec dbo.GetSomething;
Run Code Online (Sandbox Code Playgroud)

然后它会出错,因为列定义不匹配.如果Person和Car有一些机会有相同的列,它将两者连接在一起,@ myTempTable从两个表中获取所有记录,这显然也不好.

我可以定义代表两个结果集的新自定义类型,并创建那些输出参数而不是多个select语句,但我想知道是否有更好的方法 - 将结果拉入临时表或循环结果的某种方式, 或者其他的东西.

编辑

实际上,在仔细观察之后,即使输出表参数也无法解决这个问题 - 它们只是读取,而且在SQL 2012中仍然如此.(连接票据要求添加此项)

sql-server stored-procedures

24
推荐指数
4
解决办法
8万
查看次数

为什么重载true和false而不是定义bool运算符?

我一直在阅读有关在C#中重载true和false的内容,我想我理解这与定义bool运算符之间的基本区别.我看到的例子是这样的:

public static bool operator true(Foo foo) {
  return (foo.PropA > 0);
}
public static bool operator false(Foo foo) {
  return (foo.PropA <= 0);
}
Run Code Online (Sandbox Code Playgroud)

对我来说,这与说:

public static implicit operator bool(Foo foo) {
  return (foo.PropA > 0);
}
Run Code Online (Sandbox Code Playgroud)

据我所知,区别在于,通过分别定义true和false,您可以拥有一个既是真又假的对象,或者既不是真也不是假:

public static bool operator true(Foo foo) { return true; }
public static bool operator false(Foo foo) { return true; }
//or
public static bool operator true(Foo foo) { return false; }
public static bool operator false(Foo foo) { return false; } …
Run Code Online (Sandbox Code Playgroud)

c# boolean overloading operator-keyword

18
推荐指数
2
解决办法
6406
查看次数

过滤Entity Framework查询中的"包含"表

这适用于.NET 3.5的Entity Framework:

我需要查询一个表并包含一对多关系的"多"表的集合.我试图过滤该集合作为查询的一部分 - 我对Entity Framework很新,而且我很难搞清楚它.

简化示例:作者拥有Books,而Book拥有IsFiction专栏.我想要一个过滤的作者列表,以及所有小说书籍.

没有过滤器,很容易:

var q = from a in db.Authors.Include("Books")
        where a.BirthYear > 1900
        select a;
Run Code Online (Sandbox Code Playgroud)

我可以在事后过滤,例如:

var fictionBooks = a.Books.Where(b => b.IsFiction);
Run Code Online (Sandbox Code Playgroud)

但问题是原始查询已经运行,并包含那些结果,这是不必要的数据库处理.

我可以单独查询,例如:

var q = from a in db.Authors where a.BirthYear > 1900 select a;
foreach (var a in q)
{
    var books = from b in db.Books 
                where ((b.Author.Id == a.Id) && (b.IsFiction))
                select b;
}
Run Code Online (Sandbox Code Playgroud)

但当然这是每个作者的一个电话,我也想避免.

我可以倒退,比如:

var allBooks = from b in db.Books.Include("Author")
               where b.IsFiction
               select b;
Run Code Online (Sandbox Code Playgroud)

但后来我回到原来的问题,除了现在在作者方而不是书方. …

.net c# linq entity-framework

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

Chrome成功下载文件后显示"已取消"(200状态)

不确定这是否是一个实际问题,但我在ASP.NET中编写了一个文件,即使该文件总是成功通过,在Chrome的开发人员工具网络选项卡中,我总是看到该行为红色,标记为"已取消".

我已经尝试了很多方法 - 为简单起见,我正在尝试使用简单的文本文件,但对于PDF和其他文件类型也是如此.

WebForms:我已尝试过以下几种组合:

Response.Clear();
// and/or/neither
Response.ClearHeaders();

// with and without this
Response.Buffer = true;

Response.Charset = "";
// or/neither
Response.Charset = "utf-8";

// application/pdf for PDF, also tried application/octet-stream
Response.ContentType = "text/plain";

// with and without this
Response.AddHeader("Content-Length", bytes.Length.ToString());

Response.AddHeader("Content-Disposition", "attachment; filename=1.txt");

// bytes is the UTF8 bytes for a string or the PDF contents
new MemoryStream(bytes).WriteTo(Response.OutputStream);
// or
Response.Write("12345");

// any combination of the following 3, or none at all
Response.Flush();
Response.Close();
Response.End();
Run Code Online (Sandbox Code Playgroud)

MVC(2和3,还没试过4):

byte[] fileContents …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc download

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

为什么在log4net中调用IsDebugEnabled?

我很好奇为什么我看到人们编写如下的log4net日志记录代码:

if (_logger.IsDebugEnabled)
{
    _logger.Debug("Some debug text");
}
Run Code Online (Sandbox Code Playgroud)

我已经完成了对log4net的反汇编,并调用Debug再次调用相同的代码,看看它是否在实际记录之前启用,因此IsDebugEnabled调用是不必要的,实际上是重复的代码.

人们有这样做的原因吗?也许旧的版本曾经是旧版本中的必需品,但现在不再存在了?或者它有合理的理由吗?或者也许人们只是不知道他们不需要这样做?

对于其他级别(信息,错误,警告,最好等)也存在相同的行为.

c# log4net

16
推荐指数
3
解决办法
4378
查看次数

来自Entity Framework的极慢且低效的查询执行

我已经在Windows 2008R2中的ASP.NET上运行了.NET 4.5的Entity Framework 4.1.我使用EF代码优先连接到SQL Server 2008R2,并执行相当复杂的LINQ查询,但只产生了一个Count().

我在两个不同的Web服务器上重现了这个问题,但只有一个数据库(当然是生产).它最近开始在Web或数据库端没有应用程序,数据库结构或服务器更改.

我的问题是在某些情况下执行查询需要花费大量时间(接近4分钟).我可以从SQL Profiler中提取实际查询,并在大约1秒内在SSMS中执行.这对我来说是一致且可重复的,但是如果我将其中一个参数("2015-01-22之后的日期"参数)的值更改为更早的内容,例如2015-01-01,或更晚的2015-02- 01,它在EF中工作正常.但我把它重新回到了2015-01-22并再次放缓.我可以一遍又一遍地重复这个.

然后我可以在EF中运行一个类似但不相关的查询,然后回到原始版本,这次运行正常 - 与之前完全相同的查询.但是如果我打开一个新的浏览器,循环就会重新开始.那部分也没有意义 - 我们没有做任何事情来保留用户会话中的数据上下文,所以我不知道为什么会发挥作用.

但这一切都告诉我数据本身很好.

在Profiler中,当查询正常运行时,大约需要一两秒钟,并显示大约2,000,000个读取和大约2,000个CPU.当它运行缓慢时,需要3.5分钟,值为300,000,000和200,000 - 所以读取大约高150倍,CPU高出100倍.同样,对于相同的SQL语句.

有关EF可能采取哪些不同措施的建议,这些建议不会出现在查询文本中?是否存在某种隐藏的连接属性,在某些情况下可能导致不同的执行计划?

编辑

EF构建的查询是使用文本中包含的参数构建巨型字符串的查询之一,而不是SQL参数:

exec sp_executesql 
   N'SELECT [GroupBy1].[A1] AS [C1] 
     FROM ( 
          SELECT COUNT(1) AS [A1]
           ...
           AND ([Extent1].[Added_Time] >= convert(datetime2, ''2015-01-22 00:00:00.0000000'', 121)) 
           ...
           ) AS [GroupBy1]'
Run Code Online (Sandbox Code Playgroud)

编辑

我不是将此作为答案添加,因为它实际上并没有解决潜在的问题,但最终通过重建索引和重新计算统计数据来解决这个问题.没有比平时更长的时间,这似乎已经解决了造成这个问题的任何问题.

我会继续阅读这里的一些链接,以防再次发生这种情况,但由于它现在都在工作并且无法实现,我不知道我是否确实知道它到底在做什么.

感谢所有的想法.

c# sql-server asp.net entity-framework

12
推荐指数
2
解决办法
4527
查看次数