小编Tal*_*umy的帖子

Entity Framework Core - 具有转换 - 支持空值

我有一个带有通知电子邮件属性的 EF 模型。通知电子邮件以“;”分隔的字符串形式保存在数据库中。我添加了一个转换以将数据检索为模型中的 ICollection。这工作得很好,除了一件事:当字符串为空时,集合也为空,我想将其转换为空集合。是否可以?

//This is my code
  entity.Property(e => e.NotificationEmails)
             .HasConversion(
                v => string.Join(",", v.Select(s => s.Trim())),
                v => v.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
Run Code Online (Sandbox Code Playgroud)

我尝试添加 String.IsNullOrEmpty(v) 但 EF 忽略它。

entity-framework entity-framework-core asp.net-core

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

Entity Framework Core - 在 Queryable 中使用扩展方法

我有以下查询:

db.Users.AsQueryable()
    .Where(u => u.Id = userResolver.LoggedUserId() && u.Packages.Where(p => 
            p.StatusId == (int)PackageStatus.InProgress ||
            p.StatusId == (int)PackageStatus.Delivered ||
            p.StatusId == (int)PackageStatus.Shipped ||
            p.StatusId == (int)PackageStatus.Waiting) 
        .Sum(p => p.Price) > u.MaxCredit)
    .ToList()
Run Code Online (Sandbox Code Playgroud)

我想要实现的目标是将所有包状态检查分组到扩展方法中。像这样的东西:

db.Users.AsQueryable()
        .Where(u => u.Id = userResolver.LoggedUserId() &&
             u.Packages.Where(p => p.IsShippedOrInProgress())
            .Sum(p => p.Price) > u.MaxCredit)
        .ToList()


 //This is the extension method
 public static bool IsShippedOrInProgress(this Package p) {
    return p.StatusId == (int)PackageStatus.InProgress ||
           p.StatusId == (int)PackageStatus.Delivered ||
           p.StatusId == (int)PackageStatus.Shipped ||
           p.StatusId == (int)PackageStatus.Waiting)
 }
Run Code Online (Sandbox Code Playgroud)

当我查看第一个示例中生成的 sql 查询时,一切似乎都正常,但是当我使用第二种方法时,检查状态的查询部分不存在。

c# entity-framework entity-framework-core

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

Web Api 中的 Unity 容器 PerRequestLifetimeManager

我有一个 WEB API 应用程序,并且使用 UnityContainer 作为我的 DI。由于我将 UnitOfWork 与实体框架结合使用,因此我想在每个请求的 UnityContainer 中注册 DataContext。我很失望地发现没有 LifeTimeManager 可以为每个请求提供新的范围。经过进一步挖掘,我发现 Unity.AspNet.Mvc 确实包含一个 PerRequestLifetimeManager。我的问题是:

  1. Unity 不包含 PerRequestLifetimeManager 是否有原因?在我看来,根据请求注册某些内容是很常见的情况。
  2. Unity.AspNet.Mvc 包含 PerRequestLifetimeManager 是否有特殊原因?
  3. 如果我在 WebApi 项目中使用 Unity.AspNet.Mvc,有什么需要了解的吗?
  4. 如果使用线程或任务,容器如何知道它属于同一个请求?

c# dependency-injection unity-container asp.net-web-api asp.net-web-api2

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

Angular & Asp.Net Core - 启用 2 因素身份验证

我有一个用 angular 7 编写的单页应用程序,它与我的 ASP.Net Core 2.2 Web API 服务器进行通信。登录时,用户使用“资源所有者密码凭据”授权将他的凭据发送到我的授权服务器(连接/令牌)。我正在尝试添加 2 因素身份验证 (SMS),但找不到任何描述如何执行此操作的示例。我发现的所有示例都是使用 MVC 编写的,使用 cookie 身份验证。

我在考虑这个流程,但我觉得应该有更好的方法

  1. 用户输入他的用户名和密码
  2. 如果用户启用了 2 个因素,我将向他发送带有代码的短信。此外,将向客户端发送有限的 access_token 和 id 令牌。此 access_token 仅在使用户能够发送 2 因素代码时有效。如果 id-token 有“两个因素”的声明:“on”,我会将用户重定向到 SMS 确认代码。
  3. 用户将发送带有代码的 post 请求。如果代码匹配,我将向客户端返回一个包含所有声明的新 access_token。

asp.net oauth-2.0 two-factor-authentication openiddict angular

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

mongodb/mongoose - 何时使用子文档以及何时使用新集合

我想知道是否有关于何时使用新文档以及何时使用子文档的经验法则。在 sql 数据库中,我曾经通过规范化规则打破所有关系以分离表并将它们与键连接,但我找不到关于在 mongodb 中做什么的好方法(我不知道其他 no-sql 数据库如何处理)。任何帮助将被赞赏。亲切的问候。

mongoose mongodb

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

Web Api - 同时执行少量请求时响应速度非常慢

我有一个 Web API C# 项目。我注意到当向控制器发送很少的请求时(很少有甚至 7-10 个),一些请求需要很长时间(5-7 秒)。单独发送每个请求时,每个请求耗时不到200ms。我正在向我的本地主机(开发环境)发送请求,因此服务器上不应该有任何延迟或大量使用。

我在 global.asax 中添加了这段代码,以查看每个请求需要多长时间。

//Global asax

 private Dictionary<string, StopWatch> urlTimers = new Dictionary<string, StopWatch>();
    void Application_BeginRequest(object sender, EventArgs e)
    {
        HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
        var requestedUrl = currentContext.Request.RequestContext.HttpContext.Request.RawUrl;
        var urlWithoutQueryParams = requestedUrl.Split('?')[0];
        if (urlWithoutQueryParams.StartsWith("/controller"))
        {
            var stopWatch = new StopWatch();
            stopWatch.Start(urlWithoutQueryParams);
            urlTimers[urlWithoutQueryParams] = stopWatch;
        }

     
    }

    void Application_EndRequest(object sender, EventArgs e)
    {
        HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
        var requestedUrl = currentContext.Request.RequestContext.HttpContext.Request.RawUrl;
        var urlWithoutQueryParams = requestedUrl.Split('?')[0];
        if (urlWithoutQueryParams.StartsWith("/controller"))
        {
            var stopWatch = urlTimers[urlWithoutQueryParams]; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net asp.net-web-api

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