我通常EF Core在我的 Web 应用程序中使用许多异步方法,如下所示:
await db.Parents.FirstOrDefaultAsync(p => p.Id == id);
Run Code Online (Sandbox Code Playgroud)
我们知道,ThreadPool默认情况下,初始线程数仅限于 CPU 逻辑内核数。用户请求也由ThreadPool.
由于应用程序中有许多异步调用,我是否应该担心处理用户请求或性能问题?
我一直在研究几个非 Web 应用程序,Entity Framework并且一直在努力寻找实现的正确方法Generic Repository使用 DbContext。
我搜索了很多,很多文章都是关于具有短暂上下文的 Web 应用程序。在桌面方法中,我找不到合适的方法。
一种方法是 DbContext per ViewModel但我不同意将 View 与 Repository 层耦合。
另一种是这样使用using子句:
using(var context = new AppDbContext())
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是这样我们就不会Unit of Work也不能使用IoC Containers.
那么在桌面应用程序中使用 DbContext 的最佳实践是什么?
我这样初始化HttpClient:
public static CookieContainer cookieContainer = new CookieContainer();
public static HttpClient httpClient = new HttpClient(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate, CookieContainer = cookieContainer }) { Timeout = TimeSpan.FromSeconds(120) };
Run Code Online (Sandbox Code Playgroud)
所以TaskCanceledException如果在 120 秒内没有收到响应,所有查询都应该抛出。但是某些查询(例如 1 of 100 000-1 000 000)会无限挂起。
我写了以下代码:
public static async Task<HttpResponse> DownloadAsync2(HttpRequestMessage httpRequestMessage)
{
HttpResponse response = new HttpResponse { Success = false, StatusCode = (int)HttpStatusCode.RequestTimeout, Response = "Timeout????????" };
Task task;
if (await Task.WhenAny(
task = Task.Run(async () =>
{
try …Run Code Online (Sandbox Code Playgroud) 我目前正在构建一个应用程序,其中每个用户都有一个存储在用户会话存储中的唯一密钥。此密钥用于解密数据库中的用户数据。由于应用程序的存储库层处理数据库查询(使用 Dapper),我希望在那里进行解密。
现在的问题是:我可以从会话存储中检索用户密钥,将其传递给控制器,然后传递给服务,然后在链接的每个方法中使用名称为“key”的参数传递给存储库。有没有办法将密钥从控制器传递到存储库层,而不必在每次调用中手动包含密钥?
如果有比将它存储在会话存储中更好的解决方案,我愿意接受它,如果它能让这更容易。
我在将 \n 转换为 < br/> 时遇到问题。我要转换的文本是test\ntest\n\ntest
我希望它像test<br />test<br /><br />test. 所以每个 \n 都需要替换为<br />.
现在我正在使用此代码:
Regex regex = new Regex(@"(\n)+");
string ticketCategorieOmschrijving = regex.Replace("test\ntest\n\ntest", "<br />");
Run Code Online (Sandbox Code Playgroud)
但是此代码替换\n\n为单个<br />,而它需要<br /><br />
有人可以帮忙吗?
希望有人能通过这次加入为我指明正确的方向。我正在尝试将一些 SQL 转换为 Linq。我的 SQL 在几个内连接之后有一个左外连接。以下 SQL 产生所需的结果:
SELECT TOP(50) [t].[TagFriendlyName] AS [TagName], [t0].[timeStamp] AS [LastSeen], [l].[Name] AS [LocationName]
FROM [Tags] AS [t]
INNER JOIN [tag_reads] AS [t0] ON [t].[epc] = [t0].[epc]
INNER JOIN [ReaderData] AS [r] ON [t0].[ReaderDataId] = [r].[Id]
LEFT OUTER JOIN [Readers] AS [r0] ON [r].[mac_address] = [r0].[mac_address]
INNER JOIN [Locations] AS [l] on [t0].[antennaPort] = [l].[AntennaId] AND [r].[Id] = [l].[ReaderId]
GROUP BY [t].[TagFriendlyName], [t0].[timeStamp], [l].[Name]
ORDER BY [t0].[timeStamp] DESC
Run Code Online (Sandbox Code Playgroud)
我的 Linq 代码如下,但我不知道如何正确插入左外连接。不知道如何引入需要 LEFT OUTER JOIN 的 …
请考虑以下假设:
EF以及如何以最佳方式正确使用它。EF由于其兼容性OOP和易用性,我更喜欢在我的应用程序中使用。我知道EF(即使使用最佳实践)与Dapperor相比有一些性能下降ADO.NET。
但我的问题是,根据我的假设,这个性能问题是相当大的还是我可以EF在我的高流量 Web 应用程序中安全使用?
c# ×7
async-await ×2
.net-core ×1
asp.net ×1
asp.net-core ×1
html ×1
httpclient ×1
linq ×1
repository ×1
sql-server ×1
threadpool ×1
timeout ×1
wpf ×1