小编Que*_*ner的帖子

如何在LINQ查询中访问关联?

实体数据模型

我在查询这个问题时遇到了问题(我是LINQ的新手,请原谅我),我花了几个小时在网上搜索.在SQL中我只想这样做

SELECT c.Forname, c.Surname cg.Title, g.GroupName
FROM Contact c
    inner join ContactGroup cg on cg.ContactID = c.ID
    inner join Group g on cg.GroupNameID = g.ID
WHERE g.ID=1;
Run Code Online (Sandbox Code Playgroud)

我曾经尝试过,但失败了,因为:

var result = 
    from c in cc.Contacts
    from cg in c.ContactGroups
    from g in cg.Group 
    where g.ID==1
    select new
    {
        c.Forename,
        c.Surname,
        cg.Title,
        g.GroupName
    };
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我我做错了什么或指导我到某个地方获取更多信息吗?

非常感谢.

c# linq ado.net-entity-data-model

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

.NET Entity Framework Core、依赖注入和线程的 DBContext System.ObjectDisposed 异常

我不确定我是否正确地处理这个问题。

背景:我有一个控制器操作 GET foo() 作为示例。这个 foo() 需要去调用 bar(),而 bar() 可能需要很长时间。因此,我需要 foo() 在 bar() 完成之前(或无论何时)以“OK”响应

稍微复杂的是 bar() 需要访问 DBContext 并从 DB 中获取一些数据。在我当前的实现中,当我尝试通过 bar 访问数据库时,我得到了一个“DBContext System.ObjectDisposed”异常。任何想法为什么以及如何解决这个问题?我对线程和任务真的很陌生,所以我可能完全犯了这个错误!

我使用依赖注入在启动时提供数据库上下文

     services.AddEntityFrameworkNpgsql()
        .AddDbContext<MyDBContext>()
        .BuildServiceProvider();
Run Code Online (Sandbox Code Playgroud)

然后我调用 foo() ,它又使用一个新线程调用 bar() (也许我做错了?):

    public async Task<string> foo(string msg)
    {

        Thread x = new  Thread(async () =>
        {
            await bar(msg);
        });

        x.IsBackground = true;
        x.Start();

        return "OK.";
    }
Run Code Online (Sandbox Code Playgroud)

所以 bar 立即尝试访问 DBContext 以获取一些实体并抛出异常!

未处理的异常:System.ObjectDisposedException:无法访问已处理的对象。此错误的一个常见原因是处理从依赖注入解析的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。如果您在上下文上调用 Dispose() 或将上下文包装在 using 语句中,则可能会发生这种情况。如果你使用依赖注入,你应该让依赖注入容器来处理上下文实例。对象名称:'MyDBContext'。

如果我从线程中取出 bar() ,那很好,但当然“OK”不会返回,直到 bar 完成其非常长的过程,这是我需要解决的问题。

非常感谢您的指导。

使用正在运行的代码进行编辑,但它仍在等待 Task.Run 在返回“OK”之前完成。(差不多好了?)

public async …
Run Code Online (Sandbox Code Playgroud)

c# multithreading entity-framework dependency-injection entity-framework-core

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

重新设置单例httpclient的证书(Reconfiguring IHttpclientFactory?)

使用 C#、.NET Core 3.1

httpclient通过 in添加一个单例startup.cs

services.AddHttpClient<IClientLogic, ClientLogicA>().ConfigurePrimaryHttpMessageHandler(() =>
{
   var handler = new HttpClientHandler();
   
   var cert= GetCertFromX();

   handler.ClientCertificates.Add(cert);

   return handler;
});
Run Code Online (Sandbox Code Playgroud)

但是,假设稍后在ClientLogicA课堂上,我想更改证书,我该如何执行此操作,并且更改是否会持续存在以供将来使用 httpclient 单例?

c# dependency-injection dotnet-httpclient asp.net-core httpclientfactory

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

使用 Entity Framework Core、npgsql、PostgreSQL 创建新数据库

新手,抱歉。我正在阅读 Entity Framework Core、npgsql 和 PostgreSQL(所有这些都是新的!!)有人可以非常友善地解释或指出我在哪里阅读:我正在尝试使用代码创建一个全新的数据库。

根据我读到的内容,我直接使用 pgadmin 或脚本创建数据库。我想做的是通过代码创建一个数据库(这样用户就可以安装 Postgresql 和我的网站,但不必担心 PostgreSQL 的任何直接 SQL 命令)。

谢谢你!

c# postgresql npgsql entity-framework-core .net-core

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

使用 Kestrel 仅针对特定端口进行 HTTPS 重定向(侦听混合端口)

使用 .NET Core 2.1、C#、Kestrel。

这将是一个奇怪的请求,但是:我有一个需要 HTTPS 的外部 URL 和一个仅是 HTTP 的内部 URL。

我想知道如何将端口 443 上的任何流量重定向到 HTTP 到 HTTPS(保持在同一端口 443);目前它停留在 HTTP 上并死于可怕的死亡。

(注意:端口 888 仍为 HTTP,任何到达那里的流量都需要保持为不安全的 HTTP。)

我在 Program.cs 中设置了它,如下所示:

WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>()
        .UseKestrel(options =>
        {
            options.Listen(IPAddress.Any, 443, opts=>
            {
                opts.UseHttps("mycert.pfx");
            });

            options.Listen(IPAddress.Any, 888);
        })
    .Build();
Run Code Online (Sandbox Code Playgroud)

在启动时,我尝试使用 Configure(IApplicationBuilder app...) app.UseHttpsRedirection();

但这导致两个端口上的所有流量都被重定向到 HTTPS,这对 888 来说是一个问题,因为它没有 SSL 证书!

有什么方法可以根据我指定的端口从 HTTP 重定向到 HTTPS?谢谢

c# kestrel .net-core kestrel-http-server asp.net-core

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