在尝试提高极慢查询的速度时(在两个表上只有几万分钟,在SQL Server 2008上只有几万行,如果重要的话),我将问题缩小到OR我的内连接中,如:
SELECT mt.ID, mt.ParentID, ot.MasterID
FROM dbo.MainTable AS mt
INNER JOIN dbo.OtherTable AS ot ON ot.ParentID = mt.ID
OR ot.ID = mt.ParentID
Run Code Online (Sandbox Code Playgroud)
我把它更改为(我希望是)一对等效的左连接,如下所示:
SELECT mt.ID, mt.ParentID,
CASE WHEN ot1.MasterID IS NOT NULL THEN
ot1.MasterID ELSE
ot2.MasterID END AS MasterID
FROM dbo.MainTable AS mt
LEFT JOIN dbo.OtherTable AS ot1 ON ot1.ParentID = mt.ID
LEFT JOIN dbo.OtherTable AS ot2 ON ot2.ID = mt.ParentID
WHERE ot1.MasterID IS NOT NULL OR ot2.MasterID IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
..现在查询运行大约一秒钟!
OR加入条件通常是个坏主意吗?或者我在桌子的布局中不知何故不幸?
我有一个带有OLE DB Destination组件的SSIS数据流任务,它将记录插入带触发器的表中.当我INSERT对该表执行一个普通语句时,触发器会触发.当我通过SSIS任务插入记录时,触发器不会触发.
如何在SSIS中触发触发器?
我刚安装了EF4的POCO模板.我的模型中有一个实体,AnnouncementText,并且T4文件似乎正确生成.当我访问自动生成的属性时,尝试访问此新实体会引发以下错误MyObjectContext.AnnouncementTexts:
InvalidOperationException:无法找到EntityType'MyNamespace.AnnouncementText'的映射和元数据信息.
AnnouncementTextPOCO 上的属性似乎与数据库中的列匹配,并且我没有更改任何自动生成的代码.
堆栈跟踪是:
at System.Data.Objects.ObjectContext.GetTypeUsage(Type entityCLRType)
at System.Data.Objects.ObjectContext.GetEntitySetForNameAndType(String entitySetName, Type entityCLRType, String exceptionParameterName)
at System.Data.Objects.ObjectContext.CreateObjectSet[TEntity](String entitySetName)
at MyNamespace.MyObjectContext.get_AnnouncementTexts() in C:\<snip>\MyObjectContext.Context.cs:line 65
at MyNamespace.Class1.Main() in C:\<snip>\Class1.cs:line 14
Run Code Online (Sandbox Code Playgroud)
如果我.tt从解决方案中删除文件并在模型上启用代码生成,我可以毫无问题地访问该属性.
这是我的代码,如果可能有帮助:
using (var context = new MyObjectContext())
foreach (var at in context.AnnouncementTexts)
Console.WriteLine(at.Title);
Run Code Online (Sandbox Code Playgroud)
关于可能出错的任何想法?
我正在尝试用protobuf-net序列化一些对象,但不幸的是他们自由使用DateTimeOffset了protobuf-net尚未支持的对象.这导致了很多:
没有为类型定义的序列化程序:System.DateTimeOffset
我可以为未知类型定义自己的序列化例程吗?(之前曾问过同样的问题,但他的问题已得到解决.)
如果重要的话,我在.NET 4下使用最新的protobuf-net beta,v2.0.0.431.我也在使用运行时定义,因此我无法以声明方式指定如何处理某些属性.
我正在尝试通过msbuild在新机器上构建一个Web Deploy包,但它无法正常工作.它在其他机器上构建良好,但在这里我得到以下模糊错误:
...\Microsoft.Web.Publishing.targets(2767,5): error : Filename: redirection.config
...\Microsoft.Web.Publishing.targets(2767,5): error : Error: Cannot read configuration file
...\Microsoft.Web.Publishing.targets(2767,5): error :
...\Microsoft.Web.Publishing.targets(2767,5): error : Unknown error (0x80005000)
Run Code Online (Sandbox Code Playgroud)
我不确定'redirection.config'是什么,并且.targets文件的行引用根本没有帮助.
我怎样才能解决这个问题?
我正在尝试在MS Deploy包中创建一个可写入应用程序池用户的子目录.感谢Kevin Leetham 关于setAcl提供程序的有用帖子,我能够将我需要的大部分内容放到我的项目文件中:
<MsDeploySourceManifest Include="setAcl"
Condition="$(IncludeSetAclProviderOnDestination)">
<Path>$(_MSDeployDirPath_FullPath)\doc\public</Path>
<setAclAccess>Read,Write,Modify</setAclAccess>
<setAclResourceType>Directory</setAclResourceType>
<AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
</MsDeploySourceManifest>
Run Code Online (Sandbox Code Playgroud)
请注意,我已将"\ doc\public"添加到根部署目录.在VS2010构建的结果清单中,我看到以下setAcl元素:
<sitemanifest>
<contentPath path="C:\Source\...\obj\Debug\Package\PackageTmp" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp"
setAclResourceType="Directory" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp"
setAclUser="anonymousAuthenticationUser"
setAclResourceType="Directory" />
<setAcl path="C:\Source\...\obj\Debug\Package\PackageTmp\doc\public"
setAclResourceType="Directory"
setAclAccess="Read,Write,Modify" />
</sitemanifest>
Run Code Online (Sandbox Code Playgroud)
最后一行看起来很好:它附加了我想要写的子目录,并且访问修饰符似乎已经转移得足够好了.
但是,当我部署此包时,我收到一个错误:
错误:当'setAcl'提供程序与物理路径一起使用时,必须指定'setAclUser'设置的值.
这是一个令人困惑的错误,因为我并没有尝试在物理路径上设置ACL,而是在Web应用程序的子目录中.查看MS Deploy的输出,很容易看出问题所在:
Info: Adding setAcl (REST Services\1.0.334).
Info: Adding setAcl (REST Services\1.0.334).
Info: Adding setAcl (C:\...\obj\Release\Package\PackageTmp\doc\public).
Run Code Online (Sandbox Code Playgroud)
MS Deploy显然用我的绝对路径"C:...\obj\Release\Package\PackageTmp"替换了Web应用程序名称,但当我将"\ doc\public"附加到该绝对路径时,它不再将其识别为Web应用程序目录.这个确切的问题是由另一个受害者在ASP.NET论坛上描述而没有任何解决方案.
有没有人知道如何通过Web Deploy在Web应用程序的特定子目录上设置ACL,而无需在目标主机上手动识别物理路径和应用程序池用户?
我一直在使用AddParameter在我的HTTP请求中包含XML主体:
request.AddParameter(contentType, body, ParameterType.RequestBody);
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不适用于非字符串体.(RestSharp Http.RequestBody由于某种原因是一个字符串.)我尝试使用AddFile(),但我找不到任何方法来避免将"文件"编码为multipart/form,即使我只提供了一个对象.
我完全不反对解决这个问题的反思,但我希望避免修改源只是为了在HTTP请求中发送任意数据.
编辑:关于我要发送的请求,它们看起来像这样:
PUT ... HTTP/1.1
Accept: application/vnd...
Authorization: Basic ...
Content-Type: application/octet-stream
<arbitrary bytes>
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想使用相同的调用来发送不同的内容类型:
PUT ... HTTP/1.1
Accept: application/vnd...
Authorization: Basic ...
Content-Type: application/vnd...
<other arbitrary bytes>
Run Code Online (Sandbox Code Playgroud) 我正在尝试对自定义进行单元测试ConfigurationElementCollection,但是我遇到了以编程方式填充集合的问题.当我打电话时BaseAdd(),我得到以下异常:
ConfigurationErrorsException:元素"add"已被锁定在更高级别的配置中.
但是,此问题仅在运行多个测试时出现.考虑这两个测试:
private Fixture Fixtures = new Fixture(); // AutoFixtures
[Test]
public void test1()
{
var tc = Fixtures.CreateAnonymous<TenantCollection>();
var t = Fixtures.CreateAnonymous<Tenant>();
tc.Add(t);
}
[Test]
public void test2()
{
var tc = Fixtures.CreateAnonymous<TenantCollection>();
var t = Fixtures.CreateAnonymous<Tenant>();
tc.Add(t);
}
Run Code Online (Sandbox Code Playgroud)
单独执行时,每个单独的测试通过.一起运行时,抛出锁定异常.
这里发生了什么?如何解锁集合或解决锁定问题?
如何在MS Speech中使用ARPA文件?Microsoft Speech Platform 11识别器的文档意味着可以从ARPA文件编译语法.
我能够编译一个ARPA文件 - 例如,Microsoft提供的一个小例子- 使用以下命令行:
CompileGrammar.exe -In stock.arpa -InFormat ARPA
Run Code Online (Sandbox Code Playgroud)
我可以在以下测试中使用生成的CFG文件:
using Microsoft.Speech.Recognition;
// ...
using (var engine = new SpeechRecognitionEngine(new CultureInfo("en-US")))
{
engine.LoadGrammar(new Grammar("stock.cfg"));
var result = engine.EmulateRecognize("will stock go up");
Assert.That(result, Is.Not.Null);
}
Run Code Online (Sandbox Code Playgroud)
此测试通过,但请注意它使用EmulateRecognize().当我切换到使用实际的音频文件时,如下所示:
using (var engine = new SpeechRecognitionEngine(new CultureInfo("en-US")))
{
engine.LoadGrammar(new Grammar("stock.cfg"));
engine.SetInputToWaveFile("go-up.wav");
var result = engine.Recognize();
}
Run Code Online (Sandbox Code Playgroud)
结果始终为null并且测试失败.
微软非常清楚地表明它得到了支持,但即便是非常简单的例子也似乎不起作用.我究竟做错了什么?
sql ×3
msdeploy ×2
webdeploy ×2
.net ×1
app-config ×1
bulkinsert ×1
c# ×1
iis ×1
iis-7 ×1
inner-join ×1
pbkdf2 ×1
poco ×1
protobuf-net ×1
restsharp ×1
sapi ×1
sql-server ×1
ssis ×1
t-sql ×1
triggers ×1
unit-testing ×1