我正在使用新的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 2010安装了Productivity Power Tools.我也安装了ReSharper.在PowerTools安装之前,我的TODO注释(即// TODO: Do Something
)在代码中显示使用VS选项下列出的字体为"Resharper Todo Item".现在它是深蓝色,显然忽略了VS选项中的设置.
我使用的是黑暗主题,所以我几乎无法阅读这些评论.我已经挖掘了我能找到的所有选项(VS选项中的所有选项,包括新的电动工具选项,以及ReSharper选项),并且找不到它.
有什么想法吗?
如果我有这样的查询:
Select EmployeeId
From Employee
Where EmployeeTypeId IN (1,2,3)
Run Code Online (Sandbox Code Playgroud)
我在该EmployeeTypeId
字段上有索引,SQL服务器是否仍然使用该索引?
我正在寻找一种在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
给定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中仍然如此.(连接票据要求添加此项)
我一直在阅读有关在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) 这适用于.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)
但后来我回到原来的问题,除了现在在作者方而不是书方. …
不确定这是否是一个实际问题,但我在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) 我很好奇为什么我看到人们编写如下的log4net日志记录代码:
if (_logger.IsDebugEnabled)
{
_logger.Debug("Some debug text");
}
Run Code Online (Sandbox Code Playgroud)
我已经完成了对log4net的反汇编,并调用Debug再次调用相同的代码,看看它是否在实际记录之前启用,因此IsDebugEnabled调用是不必要的,实际上是重复的代码.
人们有这样做的原因吗?也许旧的版本曾经是旧版本中的必需品,但现在不再存在了?或者它有合理的理由吗?或者也许人们只是不知道他们不需要这样做?
对于其他级别(信息,错误,警告,最好等)也存在相同的行为.
我已经在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# ×5
asp.net ×2
sql-server ×2
.net ×1
asp.net-mvc ×1
boolean ×1
download ×1
indexing ×1
linq ×1
log4net ×1
overloading ×1
resharper ×1
sql ×1
transactions ×1