小编wez*_*ten的帖子

在实体框架查询中引用临时表

内存中有一个包含50,000 个产品 ID 的列表。我想从数据库获取所有这些产品。使用dbContext.Products.Where(p => list.contains(p.ID))在 SQL 中生成一个巨大的 IN - WHERE ID IN (2134,1324543,5675,32451,45735...),并且需要很长时间。部分原因是SQL Server解析这么大的字符串需要时间,而且执行计划也很糟糕。(我通过尝试使用临时表知道这一点)。

所以我使用 SQLBulkCopy 将 ID 插入到临时表中,然后运行

dbContext.Set<Product>().SqlQuery("SELECT * FROM Products WHERE ID IN (SELECT ID FROM #tmp))"
Run Code Online (Sandbox Code Playgroud)

这提供了良好的性能。但是,现在我需要产品及其供应商(每种产品有多个)。使用自定义 SQL 命令无法取回我所知道的复杂对象。那么我如何使用临时表从供应商那里获取产品呢?

(如果我可以以某种方式引用 LINQ 中的临时表,那么就可以了 - 我可以这样做dbContext.Products.Where(p => dbContext.TempTable.Any(t => t.ID==p.ID))。如果我可以在 UDF 中引用它,那也很好 - 但你不能。我不能使用真正的表,因为并发用户会使它处于不一致的状态。)

谢谢

c# sql sql-server entity-framework

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

DetectChanges如何运作?

有以下2个实体,具有以下属性:

Parent
    ID
    Children
Child
    ID
    ParentID
    Parent
Run Code Online (Sandbox Code Playgroud)

现在我有以下代码:

db.Configuration.AutoDetectChangesEnabled = false;

var child1=new Child();
parent.Children.Add(child1);
db.ChangeTracker.DetectChanges();
parent.Children.Remove(child1);

var child2=new Child();
child2.Parent=parent;
child2.ParentID=parent.ID;
db.Children.add(child2);
Run Code Online (Sandbox Code Playgroud)

此时,child1和child2完全相同.Parent和ParentID属性具有相同的值(即parent).检查它们的dbContext entry也显示完全相同的信息,例如,OriginalValues对于两者都是空的.

db.ChangeTracker.DetectChanges但是,如果我现在调用,则child1.Parent变为null,而child2.Parent保持其值.EF如何知道这样做 - 它在哪里保留所需的信息才能产生这种差异?

谢谢你的任何想法

.net c# entity-framework

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

为什么我的MSBuild文件中需要单独的项目?

有很多文章(比如这个这个)展示了如何添加要发布的文件,他们都说要在发布配置文件(.pubxml)中添加这样的内容:

<Target Name="CustomCollectFiles">
  <ItemGroup>
    <_CustomFiles Include="..\Extra Files\**\*" />
    <FilesForPackagingFromProject  Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)

为什么需要新_CustomFiles项目?为什么不简单<FilesForPackagingFromProject Include="..\Extra Files\**\*">?我尝试过,由于某种原因,这会导致项目中的每个文件都在已部署的Extra Files文件夹中结束.有人能解释一下这种行为吗?

msbuild visual-studio

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

CancellationToken 不适用于 WaitForConnectionAsync

NamedPipeServerStream server=new NamedPipeServerStream("aaqq");
var ct=new CancellationTokenSource();
ct.CancelAfter(1000);
server.WaitForConnectionAsync(ct.Token).Wait();
Run Code Online (Sandbox Code Playgroud)

我希望最后一行OperationCanceledException在一秒钟后抛出一个,但它会永远挂起。为什么?

c# asynchronous named-pipes

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

在Chrome开发者工具中查看请求时间

在Ajax开发过程中,我经常需要一种方法来查看在Chrome开发人员工具中发送请求的时间。绝对时间(例如3:45:23 PM)或相对时间(自页面加载以来为4.56s)都可以。

我可以找到的最接近的是“网络”选项卡中的时间线,其中显示了“开始时间”(您可以单击“时间线”标题以选择要显示的信息),但是通常只能将其移至最近的20秒: 在此处输入图片说明

javascript ajax google-chrome google-chrome-devtools

4
推荐指数
3
解决办法
2022
查看次数

用于设备的Chrome开发者工具搞砸了

在过去的两个月中,Chrome开发者工具在Windows上检查Android设备的网页时,完全搞砸了并且无法使用.检查常规网站是好的.我尝试重新安装Chrome.例子:

在此输入图像描述 在此输入图像描述

android google-chrome google-chrome-devtools

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

为什么我的析构函数从未被调用过?

在我的表单构造函数中创建CustomPropertyList类.

form(String ^s)
{
    InitializeComponent();
    CustomPropertyList ^propertyList = gcnew CustomPropertyList(s);
...
Run Code Online (Sandbox Code Playgroud)

CustomPropertyList类有一个析构函数

CustomPropertyList::~CustomPropertyList()
{

    if (MessageBox::Show("Do you want to save your changes?","Editin",MessageBoxButtons::YesNo)==DialogResult::Yes)
...
Run Code Online (Sandbox Code Playgroud)

程序退出时为什么不调用它?(我知道这不是因为我没有看到消息框,那里有一个断点)

我非常感谢任何帮助

.net c++-cli

2
推荐指数
1
解决办法
1650
查看次数

在调用c ++函数时,CLR如何避免thunking?

MSDN声明:

无论使用何种互操作技术,每次托管函数调用非托管函数时都需要特殊的转换序列(称为thunks),反之亦然.这些thunk是由Visual C++编译器自动插入的,但重要的是要记住,累积起来,这些转换在性能方面可能很昂贵.

然而,CLR肯定会一直调用C++和Win32函数.为了处理文件/网络/窗口以及几乎任何其他内容,必须调用非托管代码.它是如何摆脱分块惩罚的?

这是一个用C++/CLI编写的实验,可能有助于描述我的问题:

#define REPS 10000000

#pragma unmanaged
void go1() {
    for (int i = 0; i < REPS; i++)
        pow(i, 3);
}
#pragma managed
void go2() {
    for (int i = 0; i < REPS; i++)
        pow(i, 3);
}
void go3() {
    for (int i = 0; i < REPS; i++)
        Math::Pow(i, 3);
}

public ref class C1 {
public:
    static void Go() {
        auto sw = Stopwatch::StartNew();
        go1();
        Console::WriteLine(sw->ElapsedMilliseconds);
        sw->Restart();
        go2();
        Console::WriteLine(sw->ElapsedMilliseconds);
        sw->Restart();
        go3();
        Console::WriteLine(sw->ElapsedMilliseconds); …
Run Code Online (Sandbox Code Playgroud)

c# c++ c++-cli

2
推荐指数
1
解决办法
119
查看次数

为什么我的程序只能在调试模式下运行?

我正在使用 Visual Studio 2008,带有 .net 框架、C++/CLI。我的程序仅在调试模式下运行(即使从资源管理器运行) - 但在发布模式下它说程序已停止工作。(但如果我在释放模式时按 F5,它运行正常)所有设置都是相同的。会是什么呢?请问有人有什么建议吗?

.net c++-cli

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

SmtpClient.Send 卡住了

string host = "gauntlet.asoshared.com", username= "a@a.test", pwd = "abc",
    from = "a@a.test", to = "b@b.test";
int port = 465;

var mm = new MailMessage(from, to);
mm.Body = "b1";
mm.Subject = "s1";
mm.IsBodyHtml=false;
using (var smtp=new SmtpClient(host, port)) {
    smtp.EnableSsl = true;
    smtp.Credentials = new NetworkCredential (username, pwd);
    smtp.Send(mm);
}
Run Code Online (Sandbox Code Playgroud)

这一直停留在smtp.Send. 大约 2 分钟后,我收到超时错误。使用 Outlook,它可以完美运行(使用我的真实凭据)。查看 Wireshark,在运行此代码时,我看到 TCP SYN、SYN-ACK、ACK,然后什么也没有。使用 Outlook 时,这些后跟一个TLSv1.2 Client Hello等。

尝试在代码开头添加以下几行:

ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
ServicePointManager.Expect100Continue=false;
Run Code Online (Sandbox Code Playgroud)

为什么 C# …

c# smtp

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