小编Seb*_*ber的帖子

DbContext ChangeTracking杀死性能?

我正在将应用程序从EF1升级到EF4.1我使用"ADO.NET DbContext Generator"模板创建了一个DbContext和一组POCO.

当我查询生成的DbContext时,查询的数据库部分需要4ms才能执行(使用EF Profiler验证).然后它将上下文大约40秒(用文字:FORTY!)在它将结果返回给应用程序之前做任何事情.

EF1在不到2秒的时间内处理相同的查询.

关闭AutoDetectChanges,LazyLoading和ProxyGeneration赢了2-3秒.

当我使用AsNoTracking()扩展方法时,我能够将总执行时间减少到大约3秒.

这表明ChangeTracking是罪魁祸首.

但ChangeTracking是我需要的.我必须能够最终坚持所有更改,而无需手工挑选修改了哪些实体.

我有什么想法可以解决这个性能问题?

performance change-tracking entity-framework-4.1

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

如何使用StructureMap注入AutoMapper IMappingEngine

我在Automapper中找到的大多数示例都使用静态Mapper对象来管理类型映射.对于我的项目,我需要使用StructureMap注入IMapperEngine作为对象构造的一部分,以便我们可以在单元测试中模拟映射器,因此我们不能使用静态映射器.我还需要支持配置AutoMapper配置文件.

我的问题是如何配置StructureMap注册表,以便在构造MyService实例时它可以提供IMappingEngine的实例.

这是Service构造函数签名:

public MyService(IMappingEngine mapper, IMyRepository myRepository, ILogger logger)
Run Code Online (Sandbox Code Playgroud)

这是StructureMap注册表

public class MyRegistry : StructureMap.Configuration.DSL.Registry
{
    public MyRegistry()
    {
        For<IMyRepository>().Use<MyRepository>();
        For<ILogger>().Use<Logger>();
        //what to do for IMappingEngine?
    }
}
Run Code Online (Sandbox Code Playgroud)

我要加载的配置文件

public class MyAutoMapperProfile : AutoMapper.Profile
{
    protected override void Configure()
    {
        this.CreateMap<MyModel, MyDTO>();
    }
}
Run Code Online (Sandbox Code Playgroud)

structuremap dependency-injection automapper

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

EF4.1 Code First:带输出参数的存储过程

我使用Entity Framework 4.1 Code First.我想调用具有输出参数的存储过程,并检索除强类型结果集之外的输出参数的值.它的搜索功能具有这样的签名

public IEnumerable<MyType> Search(int maxRows, out int totalRows, string searchTerm) { ... }
Run Code Online (Sandbox Code Playgroud)

我发现了许多"功能导入"的提示,但这与Code First不兼容.我可以使用Database.SqlQuery(...)调用存储过程,但这不适用于输出参数.

我可以使用EF4.1 Code First解决这个问题吗?

parameters stored-procedures entity-framework ef-code-first

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

在没有PowerShell的情况下将文件嵌套在Nuget包中

标题说明了一切.我有一些文件,我想在安装NuGet包时嵌套但不能使用PowerShell脚本,因为它们不再运行(见这里).

有没有其他方法可以实现这一目标?


更新:嵌套我的意思是*.resx和/ *.Designer.cs*.xaml代码隐藏文件*.xaml.cs.我知道我可以通过<DependentUpon>在*.csproj文件中添加一个元素来实现这一点,但我不知道如何在不使用PowerShell的情况下添加该元素.

解决方案资源管理器中嵌套文件的屏幕截图


UPDATE2: init.ps1在解决方案中第一次安装软件包时运行.但这不会削减它.当程序包安装到项目中时,我需要运行脚本,就像install.ps1运行到NuGet3一样.


更新3:我想要做的是将3个文件添加到Properties目标项目的文件夹中(Resources.resx,Resources.ttResources.Designer.cs).它们是通常资源实施的替代品.这些文件在添加到项目中时由nuget包安装.

这是将*.nuspec文件添加到Content包文件夹的文件的一部分.由于其中只有一个实际上是内容(其他内容分别是嵌入式资源和编译),因此能够相应地设置其构建操作,但一次只能一步.

<files>
  <file src="Properties\Resources.resx" target="content\Properties\Resources.resx" />
  <file src="Properties\Resources.tt.pp" target="content\Properties\Resources.tt.pp" />
  <file src="Properties\Resources.Designer.cs" target="content\Properties\Resources.Designer.cs" />
</files>
Run Code Online (Sandbox Code Playgroud)

当这些文件被添加到项目中时,我希望在*.csproj文件中嵌套,而不是通过单独的*.props文件发生,如果这是某种可能的话.

powershell nuget nuget-package

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

登录自定义配置源

我正在编写一个自定义ConfigurationSource/ConfigurationProvider来访问存储在 Spring Cloud 配置服务器中的配置。

我希望能够将错误和跟踪信息写入日志,但到目前为止还没有找到一种方法来ILogger<T>在应用程序生命周期的早期获取这些信息。

我知道这个答案,但LoggerFactory.AddConsole已被弃用。拟议替代方案的唯一实施ILoggingBuilder是内部实施。复制非常简单的实现也对我没有帮助,因为我无权访问IServiceProvider.

还有其他想法吗?


更新

没什么太多的,但这将是我的问题的轮廓。Program.CreateWebHostBuilder(string[])它是ASP.NET Core Web 应用程序的摘录。

IWebHostBuilder builder = WebHost.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((webHostBuilderContext, configurationBuilder) =>
    {
        ILogger<MyCustomConfigSource> logger = ???;
        configurationBuilder.Add(new MyCustomConfigSource(logger));
    });
Run Code Online (Sandbox Code Playgroud)

logging asp.net-core

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

VSTest-Task 未运行测试计划中的 .NET Core 2.1 xUnit-Tests

我正在尝试在 VSTS 中创建一个发布管道,该管道运行我的 xUnit-tests,如Test Plan.

长话短说:我无法让它工作。

我正在使用什么:

  • Azure DevOps(以前称为 VSTS)
  • Visual Studio 测试任务 (v2.*)
  • 针对 .NET Core 2.1 的测试项目
  • xunit 2.4 与 xunit.runner.visualstudio 2.4

在 Azure DevOps 中,我定义了一个Test Plan,其中包含一个Test Suite,其中包含一个Test,其中有一个Associated Automation指向我的 xUnit 测试。我必须使用 REST API 将测试代码链接到此处Test所述。

Test我可以在 VSTest 任务的可视化设计器中选择它。

当我运行发布管道时,VSTest 任务失败并显示以下错误消息:

DiscoveryMessage : System.IO.FileNotFoundException: Unable to find tests for D:\a\r1\a\Foo.Tests.dll. Make sure test project has a nuget reference of package "Microsoft.NET.Test.Sdk" and framework version settings are …

xunit vstest azure-devops azure-pipelines-release-pipeline .net-core-2.1

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

如何设置调用具有特定类型的等于覆盖MoQ中的等于?

使用精细的模拟框架MoQ,我遇到了一个有点令人惊讶的方面(我不喜欢惊喜).我正在嘲笑一个应该在方法调用后添加到集合中的类,如下所示:

public class SomeClass{

}

public class Container {
    private List<SomeClass> classes = new List<SomeClass>();

    public IEnumerable<SomeClass> Classes {
        get {
            return classes;
        }
    }

    public void addSomeClass(SomeClass instance) {
        classes.Add(instance);
    }
}

[Test]
public void ContainerContainsAddedClassAfterAdd() {
    var mockSomeClass = new Mock<SomeClass>();  
    mockSomeClass.Setup(c => c.Equals(mockSomeClass.Object)).Return(true);

    var Container = new Container();
    Container.addSomeClass(mockSomeClass.Object);

    Assert(Container.Classes.Contains(mockSomeClass.Object));
}
Run Code Online (Sandbox Code Playgroud)

这很好用,模拟被添加到Container集合中,并且Equals模拟方法的设置确保IEnumerable.Contains()返回true.然而,总有一些复杂因素.我真正嘲笑的课程并不像我们那么简单SomeClass.它是这样的:

public class SomeClassOverridingEquals{
    public virtual Equals(SomeClassOverridingEquals other) {
        return false;   
    }

    public override Equals(object obj) {
        var …
Run Code Online (Sandbox Code Playgroud)

unit-testing moq equals mocking

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

Microsoft Unity界面拦截和构造函数注入之间的区别

asp.net unity中的接口拦截和构造函数注入有什么区别?我缺乏对Unity的理解我正在研究一个旧项目和unity.config,有些像这样,

<register type="ICRIC2012TrialUserService" mapTo="CRIC2012TrialUserService">
        <lifetime type="perthread"/>
        <interceptor type="InterfaceInterceptor"/>
        <policyInjection/>
</register>
Run Code Online (Sandbox Code Playgroud)

但有些人没有

<interceptor type="InterfaceInterceptor"/>
Run Code Online (Sandbox Code Playgroud)

但是在项目中,这些类和接口以相同的方式工作,就像这样

private readonly IIncomingEstimateService _incomingEstimateService;

        public ContractService(IIncomingEstimateService incomingEstimateService)
        {
            _incomingEstimateService = incomingEstimateService;
        }
Run Code Online (Sandbox Code Playgroud)

c# unity-container code-injection unity-interception

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

jQuery找不到最接近的p

任务应该非常简单:从我的输入字段开始,找到最接近的p并更改其样式.

唯一的事情是:我找不到我的...

<p>
  <div class="form-group">
    <label for="Email" class="control-label col-md-2">Email</label>
    <div class="col-md-10">
      <input type="email" value="" name="Email" class="form-control" />
    </div>
  </div>
</p>
Run Code Online (Sandbox Code Playgroud)

这是找到p元素的javascript代码

$('[name=Email]').closest("p").css('background-color', 'red')
Run Code Online (Sandbox Code Playgroud)

closest("p") 没有回报.

知道我错过了什么吗?

javascript jquery

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