我有一个带有通知电子邮件属性的 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 忽略它。
我有以下查询:
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 查询时,一切似乎都正常,但是当我使用第二种方法时,检查状态的查询部分不存在。
我有一个 WEB API 应用程序,并且使用 UnityContainer 作为我的 DI。由于我将 UnitOfWork 与实体框架结合使用,因此我想在每个请求的 UnityContainer 中注册 DataContext。我很失望地发现没有 LifeTimeManager 可以为每个请求提供新的范围。经过进一步挖掘,我发现 Unity.AspNet.Mvc 确实包含一个 PerRequestLifetimeManager。我的问题是:
c# dependency-injection unity-container asp.net-web-api asp.net-web-api2
我有一个用 angular 7 编写的单页应用程序,它与我的 ASP.Net Core 2.2 Web API 服务器进行通信。登录时,用户使用“资源所有者密码凭据”授权将他的凭据发送到我的授权服务器(连接/令牌)。我正在尝试添加 2 因素身份验证 (SMS),但找不到任何描述如何执行此操作的示例。我发现的所有示例都是使用 MVC 编写的,使用 cookie 身份验证。
我在考虑这个流程,但我觉得应该有更好的方法
asp.net oauth-2.0 two-factor-authentication openiddict angular
我想知道是否有关于何时使用新文档以及何时使用子文档的经验法则。在 sql 数据库中,我曾经通过规范化规则打破所有关系以分离表并将它们与键连接,但我找不到关于在 mongodb 中做什么的好方法(我不知道其他 no-sql 数据库如何处理)。任何帮助将被赞赏。亲切的问候。
我有一个 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)