小编Pr.*_*dor的帖子

创建LocalDB以便从Visual Studio SQL项目进行测试

我正在尝试为我的项目创建集成测试.我需要测试一个通过存储库调用存储过程的控制器.应在每个特定测试范围的运行中创建一个空数据库.所以我将实现以下步骤:

  1. 创建LocalDB
  2. 运行一些预脚本(添加测试数据)
  3. 运行测试
  4. 运行一些Post脚本(如果需要在此数据库上运行其他测试)
  5. 删除LocalDB

在我的解决方案中,我有.sqlproj所有表和SP.如何使用与C#代码相同的结构创建LocalDB.sqlproj?或者如何生成包含所有对象的脚本以在LocalDB上运行它?

.sqlproj存在MyProjectName_Create.sql的 bin文件夹中,但它没有运行cmd.ExecuteNonQuery();

任何帮助/建议将不胜感激.谢谢

PS相关问题是如何在DacServices.Deploy()中禁用预部署和部署后脚本

c# sql-server integration-testing visual-studio

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

客户端已断开连接

我在WebAPI的日志中收到以下错误

System.Web.HttpException(0x800703E3):客户端已断开连接.System.Web.Hosting中的System.Web.Hosting.IIS7WorkerRequest.EndRead(IAsyncResult asyncResult)处于System.Threading.Tasks.TaskFactory的System.Web.HttpBufferlessInputStream.EndRead(IAsyncResult asyncResult)1.FromAsyncTrimPromise 1.Complete(TInstance thisRef,Func 3 endMethod,IAsyncResult asyncResult) ,Boolean requiresSynchronization)---抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处System.IO.StreamReader.d__97.MoveNext()---从抛出异常的先前位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处System.IO.StreamReader.d__62.MoveNext()中的.HandleNonSuccessAndDebuggerNotification(任务任务)---从抛出异常的上一个位置的堆栈跟踪结束---在System.Runtime 位于Microsoft.Owin.OwinRequest.d__0.MoveNext()的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)---从抛出异常的上一个位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),位于Microsoft.Owin.Security.OAuth.OAuthAuthorizationServerHandler.d__22.MoveNext()---从抛出异常的先前位置开始的堆栈跟踪结束---在Microsoft.Owin.Security.OAuth的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)的System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处.OAuthAuthorizationServerHandler.d__0.MoveNext()---抛出异常的前一个位置的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.Throw Microsoft.Owin.Security.Infrastructure.AuthenticationMiddleware 1.d__0.MoveNext()中的System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中的ForSuonSuccess(任务任务)---从抛出异常的上一个位置开始的堆栈跟踪结束---在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)处于System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务),位于D:\ UAT中的Web.API.Middleware.OwinMiddleware.d__1.MoveNext()\Web.API\Middleware\OwinMiddleware.cs:第49行

如何通过异常过滤器处理和忽略这些异常?为什么会出现此错误,如何重现?我想抓住并忽略The client disconnected但不是全部HttpException

我看到了类似的问题,但我怎么能在异常过滤器中这样做呢?

c# asp.net-web-api

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

如果DbContext的OnConfiguring方法中的所有配置都如何使用AddDbContextPool

我正在使用PostgreSQL,并且我的ApplicationDbContext如下:

public class ApplicationDbContext : DbContext
{
    private readonly DatabaseSettings _databaseOptions;
    public ApplicationDbContext() { }
    public ApplicationDbContext(IOptions<DatabaseSettings> databaseOptions)
    {            
        _databaseOptions = databaseOptions.Value;
    }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasPostgresExtension("citext");
    }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (_databaseOptions == null)
        {
            optionsBuilder.UseInMemoryDatabase(Guid.NewGuid().ToString());
        }
        else
        {
            optionsBuilder.UseNpgsql(_databaseOptions.ConnectionString,
            npgsqlOptionsAction: sqlOptions =>
            {
                sqlOptions.EnableRetryOnFailure(
                    maxRetryCount: _databaseOptions.MaxRetryCount,
                    maxRetryDelay: TimeSpan.FromSeconds(_databaseOptions.MaxRetryDelay),
                    errorCodesToAdd: null);
            });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这种情况是许多其他情况的基础。我正在改善性能并尝试使用上下文池。文档说要添加轮询,我应该:

services.AddDbContextPool<EmployeeContext>(options => options.UseNpgsql(connection));
Run Code Online (Sandbox Code Playgroud)

但我想在OnConfiguring方法中存储.UseNpgsql和DbContext的其他配置。如何实现呢?

c# entity-framework entity-framework-core ef-core-2.2

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

分析器与代码修复模板

我想用Roslyn创建一个带代码分析器的新项目.但是我在Visual Studio 2015 Update 3中找不到任何模板.

据我所知,它应该是带有Code Fix的模板分析器.

我是VS的新手,有人可以帮助我,谢谢.

c# visual-studio roslyn-code-analysis

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

C#中的struct无法按预期工作

我正在开发一个简单的应用程序,我有点困惑.我有一个简单struct Pointint xint y.而我用它Line

public class Line : Shape {

    public Line() {
        PointA = new Point(x: 0, y: 0);
        PointB = new Point(x: 0, y: 0);
    }

    public Point PointA { get; set; }
    public Point PointB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在某个地方

var line = new Line();
line.PointB = new Point(x: 4, y: 2);
Console.WriteLine($"Line start at {line.PointA.GetX()}:{line.PointA.GetY()}; end at {line.PointB.GetX()}:{line.PointB.GetY()}");

for (int i = 0; i < 10; i++) { …
Run Code Online (Sandbox Code Playgroud)

c# struct

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

ReSharper for C#7.0

我正在使用VS 2017ReSharper Ultimate 2016.3.2.

代码构建正常但在文本编辑器中我得到类似错误的东西: 在此输入图像描述

在此输入图像描述

当我暂停时ReSharper,错误消失了.问题是什么?

resharper c#-7.0 visual-studio-2017

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

无法从 Dictionary 转换为 IDictionary

我正在尝试使用方法创建界面

void Import(int id, IDictionary<int, IDictionary<int, string>> items);
Run Code Online (Sandbox Code Playgroud)

然后像这样调用这个方法

Dictionary<int, Dictionary<int, string>> items = viewModel.Items
  .GroupBy(t => t.Number)
  .ToDictionary(t => t.Key, t => t.ToDictionary(x => x.LanguageId, x => x.Translation));


Import(id, items);
Run Code Online (Sandbox Code Playgroud)

我预计它应该有效,但出现错误

cannot convert from 'System.Collections.Generic.Dictionary<int, System.Collections.Generic.Dictionary<int, string>>' to 'System.Collections.Generic.IDictionary<int, System.Collections.Generic.IDictionary<int, string>>'  
Run Code Online (Sandbox Code Playgroud)

为什么我不能在这里使用接口 IDictionary ?我应该手动投射吗?

c# dictionary

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

为Serilog创建包装

我正在使用Serilog。为了避免在每个微服务中进行配置,我创建了一个扩展名为的私有NuGet包,例如

namespace DFX.Logging
{
    public static class Extensions
    {
        public static IWebHostBuilder UseLogging(this IWebHostBuilder webHostBuilder) =>
            webHostBuilder.UseSerilog((context, loggerConfiguration) =>
            {
                var logLevel = context.Configuration.GetValue<string>("Serilog:MinimumLevel");
                if (!Enum.TryParse<LogEventLevel>(logLevel, true, out var level))
                {
                    level = LogEventLevel.Information;
                }

                loggerConfiguration.Enrich
                    .FromLogContext()
                    .MinimumLevel.Is(level);

                loggerConfiguration
                    .ReadFrom.Configuration(context.Configuration)
                    .WriteTo.Console(
                        theme: AnsiConsoleTheme.Code,
                        outputTemplate: "[{Timestamp:yy-MM-dd HH:mm:ss} {Level:u3}] {Message:lj} <s:{SourceContext}>{NewLine}{Exception}");
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

在控制器(或其他地方)中创建记录器

private readonly ILogger _logger = Log.ForContext<Application>();
Run Code Online (Sandbox Code Playgroud)

为此,我需要使用添加using Serilog;。我想避免使用它,而只使用我的命名空间using DFX.Logging;。我该如何发财呢?到目前为止我尝试过的是:

namespace DFX.Logging
{
    // custom wrapper
    public static class Log
    {
        public static ILogger …
Run Code Online (Sandbox Code Playgroud)

c# casting serilog

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