小编len*_*iep的帖子

如何从EF Core/.NET Core 2.0中的实体名称获取DbSet

我有DbContext几个DbSet<T>属性:

public virtual DbSet<A> A { get; set; }
public virtual DbSet<B> B { get; set; }
public virtual DbSet<C> C { get; set; }
...
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我现在必须能够以实体名称作为字符串检索特定的DbSet(例如,当用户输入"A"时,我需要获取Dbset<A>).

在以前的EF版本中,以下是可能的:

var dbset = Context.Set(Type.GetType(A));

使用当前版本的EF核心有类似的方法吗?我已经尝试了几种方法来实现这一点,但我现在使用它的唯一方法是使用一个相当丑陋的开关/案例,我想摆脱它.

我在这里发现了几个类似问题的帖子,但它们都与早期的.NET Core版本或EF5/EF6有关.

c# entity-framework

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

WndProc:如何在窗体最小化时获取窗口消息

要与某项服务进行通信,我必须覆盖WindProc.并接收窗口消息.

但是,当表单最小化时,我不再收到任何消息.我知道它必须是那样的,但有没有解决方法呢?我不希望有一个永远开放的隐藏形式......

c# wndproc

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

在Windows 8中隐藏任务栏

到目前为止,我能够使用以下C#代码隐藏Windows任务栏:

[DllImport("user32.dll")]
private static extern int FindWindow(string className, string windowText);
[DllImport("user32.dll")]
private static extern int ShowWindow(int hwnd, int command);

private const int SW_HIDE = 0;
private const int SW_SHOW = 1;

...

int hwnd = FindWindow("Shell_TrayWnd", "");
ShowWindow(hwnd, SW_SHOW);
Run Code Online (Sandbox Code Playgroud)

但是在使用Windows 8时,此代码仅隐藏主监视器上的任务栏,而不是第二个,任务栏也可见.

如何才能在我的窗口显示的屏幕上隐藏任务栏?

c#

6
推荐指数
2
解决办法
2641
查看次数

有一个开源的asp.net服务器?

我目前正在寻找微软IIS的轻量级替代品来运行基于ASP.NET的小型Web服务.

Ultidev(http://ultidev.com/products/Cassini/index.htm)有一个非常好的 - 免费 - 解决方案.但是,我更喜欢开源项目.我搜索了很长时间,但无法找到任何东西.

有人知道可行的解决方案吗?

编辑:谢谢你们所有人!不知怎的,我错过了MONO的解决方案......

c# asp.net iis open-source

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

如何处理多个相同的MIDI USB设备

我的c#应用程序必须使用多个相同的USB MIDI接口,这些接口都来自同一制造商.

在设备管理器中,所有设备都显示相同的驱动程序名称/ CLSID - 只有PNPDeviceID不同.当我列出所有MIDI输入/输出(使用MIDI-dot-net)时,它们显示如下:

  • ACME-MIDI:端口1
  • 1- ACME-MIDI:端口1
  • 2- ACME-MIDI:端口1

不幸的是,对于同一设备,这些名称并不总是相同.设备1的端口有时显示为"ACME-MIDI:端口1",有时显示为"1-ACME:端口1"(例如,它们在重启后更改).

我用不同的方法试图找到什么名称属于哪个设备(SetupDi,WMI,Win32_PnPSignedDriver,...)但我得到设备ID 它报告的端口名称,但我无法找到报告的MIDI端口使用设备ID或驱动程序键命名(ACME-MIDI:端口n).

有什么建议?

更新

我仍在寻找一种解决方案,列出给定端口上MIDI接口的输入/输出端口(例如使用Windows API).看起来这很棘手,这就是为什么我开始对此表示赏心悦目.

c# midi

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

.NET 6 中的 TLS v1.2 密码套件 / GET 请求超时

我目前正在尝试连接到至少需要 TLS v1.2 的 AWS REST API。文档统计表明,客户端还必须支持具有完美前向保密 (PFS) 的密码套件,例如 Ephemeral Diffie-Hellman (DHE) 或 Elliptic Curve Ephemeral Diffie-Hellman (ECDHE)。

使用发送GET请求时HttpClient,连接会超时。我已将 TLS 版本明确设置为TLSv1.2

httpClientHandler.SslProtocols = SslProtocols.Tls12;
Run Code Online (Sandbox Code Playgroud)

这有效,我可以在 Wireshark 跟踪中看到使用了正确的 TLS 版本。我还确认不存在防火墙问题或类似问题。

工作示例(CURL)

当使用cURL时,我可以看到响应中的密码套件Sever HelloTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030),这也是服务器所要求的。

在此输入图像描述

损坏的示例(带有 HttpClient 的 .NET 6)

在 .NET 6中使用时HttpClient,上面提到的密码套件在 中提供Client Hello,但服务器响应突然使用TLS_RSA_WITH_AES_256_GCM_SHA384

在此输入图像描述

我可以看到 cURL 请求中还有其他扩展名,例如Extension: psk_key_exchange_modes. 对于服务器不接受第一个密码套件的原因有什么解释吗?根据我的理解,第一个提供的密码套件应该是首选,对吗?

有没有办法在 .NET 6 中强制使用某种密码套件?

这是我用来重现该问题的示例:

public async void PollUrl(string url)
{
    HttpResponseMessage msg = …
Run Code Online (Sandbox Code Playgroud)

.net c# windows amazon-web-services tls1.2

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

在VB.NET中更改注册表值

我已经搜索了很多,以找到解决我的问题的方法,但我找不到任何具体的解决方案.

我需要更改存储在下面的值HKEY_LOCAL_MACHINE\SOFTWARE\APP_NAME.不可能使用.NET的注册表功能,因为它们有严格的限制.

以下代码片段可以解决我的问题:

Dim regKey As RegistryKey
Dim ver As Decimal
regKey = My.Computer.Registry.LocalMachine.OpenSubKey("HKEY_LOCAL_MACHINE\SOFTWARE\APP_NAME", True)
Run Code Online (Sandbox Code Playgroud)

regKey.SetValue("IP","192.168.10.15:15800")regKey.Close()

不幸的是,当我尝试设置值时,我得到一个NullReferenceExeption.

我该怎么办?我导入了Microsoft.Win32,RegistryKey不接受任何构造函数.

vb.net registry uac

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