我正在使用 .NET Core 3.1。我想User ID使用 ASP.NET Core 身份用户名填充Application Insights 中的属性。我得到了 Microsoft 的这篇文章,但它适用于完整的 .NET Framework。我还尝试了此处 给出的以下代码(我将声明更改为身份)
public class TelemetryEnrichment : TelemetryInitializerBase
{
public TelemetryEnrichment(IHttpContextAccessor httpContextAccessor) : base(httpContextAccessor)
{
}
protected override void OnInitializeTelemetry(HttpContext platformContext, RequestTelemetry requestTelemetry, ITelemetry telemetry)
{
telemetry.Context.User.AuthenticatedUserId =
platformContext.User?.Identity.Name ?? string.Empty;
}
}
Run Code Online (Sandbox Code Playgroud)
但不知道如何将其包含在管道中。我试过了,services.AddSingleton<ITelemetryInitializer, TelemetryEnrichment>();但没有帮助。Application Insights 仍显示其自己的用户 ID。
启动文件
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, ApplicationRole>(
options => {
options.Stores.MaxLengthForKeys = 128;
options.User.RequireUniqueEmail = true;
options.Password.RequiredLength …Run Code Online (Sandbox Code Playgroud) 我在 Azure Linux 环境中托管了 Azure Function V3。我正在尝试从配置部分读取连接字符串。但我不明白。我尝试将连接字符串放在两者上,Application Settings以及Connection Strings如下所示的部分。
我正在使用依赖注入,我的Startup课程如下所示。
using BHD.Data.Data;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
[assembly: FunctionsStartup(typeof(BHD.AzureFunctions.Startup))]
namespace BHD.AzureFunctions
{
class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
var sqlConnection = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
builder.Services.AddDbContext<ApplicationDbContext>(
options => options.UseSqlServer(sqlConnection));
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使文件中存在连接字符串,我也能NullPointerException继续,如下所示。ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionStringlocal.settings.json
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true"
},
"ConnectionStrings": {
"DefaultConnection": "<My connection string>"
}
}
Run Code Online (Sandbox Code Playgroud) 我被分配了一项任务来验证使用SaveChanges(). 开发人员应该预先知道在调用时将更改多少条记录。SaveChanges()
为了实现它,我创建了一个扩展方法,用于在我使用事务的地方DbContext调用SaveChangesAndVerify(int expectedChangeCount),并将此参数与 的返回值等同SaveChanges()。如果值匹配,则提交事务,如果不匹配,则回滚事务。
请检查下面的代码,让我知道它是否有效以及我是否需要考虑任何事项。另外,有没有更好的方法来做到这一点?
public static class DbContextExtensions
{
public static int SaveChangesAndVerify(this DbContext context, int expectedChangeCount)
{
context.Database.BeginTransaction();
var actualChangeCount = context.SaveChanges();
if (actualChangeCount == expectedChangeCount)
{
context.Database.CommitTransaction();
return actualChangeCount;
}
else
{
context.Database.RollbackTransaction();
throw new DbUpdateException($"Expected count {expectedChangeCount} did not match actual count {actualChangeCount} while saving the changes.");
}
}
public static async Task<int> SaveChangesAndVerifyAsync(this DbContext context, int expectedChangeCount, CancellationToken cancellationToken = default)
{ …Run Code Online (Sandbox Code Playgroud) entity-framework-core asp.net-core asp.net-core-3.1 ef-core-3.1 entity-framework-core-3.1