小编Maj*_*jor的帖子

如何为Entity Framework CodeFirst迁移设置隔离级别

如果针对为SQL Server复制发布的表运行实体框架迁移(自动或显式),则会出现以下错误:

您只能在READ COMMITTED或REPEATABLE READ隔离级别中指定READPAST锁

之前(此处)存在一些问题,但它们完全无法解决根本原因:实体框架迁移在Serializable隔离级别运行(如SQL Server分析器中清楚显示).

哪个是结构更改事务的安全选择,但它与发布的sql server表不兼容.与dbContext.SaveChanges()事务中使用的默认READ COMMITED SNAPSHOT级别不同,我还没有找到一种方法来为代码中的迁移实际设置不同的隔离级别:

  • TransactionScope (设置事务隔离级别的经典方法)似乎在期间被忽略 Database.Initialize()

  • 最近推出的Database.BeginTransaction(isolationLevel)实际尝试在启动新事务之前初始化数据库,因此无法使用.

已知的解决方法

  1. 生成到SQL脚本的所有迁移.这是有效的,但基于代码的迁移是一个我不想错过的强大工具.

  2. 使用显式迁移,并使用类似的东西启动每个Up()Down()方法

    Sql("set transaction isolation level read committed");

这有效,但由于开发人员通常不使用复制数据库,因此不方便且容易出错.

c# sql-server entity-framework ef-migrations entity-framework-6

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

.Net Core 2.0"在构建时生成Nuget包"问题与构建后事件

新的.NET Core 2.0项目提供了从项目输出创建Nuget Package的简便方法.只需单击"在构建时生成Nuget包"复选框即可完成. 在此输入图像描述 它工作正常,但我有一个构建后事件的问题.我想在每次构建后将解决方案中的所有包复制到特定文件夹.所以我使用脚本的" Post-build event命令行 ":

xcopy "$(ProjectDir)$(OutDir)..*.nupkg" "$(SolutionDir)..\WebServicePracticesNuget\" /Y /I
Run Code Online (Sandbox Code Playgroud)

有时它工作得很好,有时根本没有.到目前为止,我的调查得出结论,Nuget包创建不是构建过程本身的一部分.因此,脚本(有时)将在生成包之前触发,并且是不可预测的.我的解决方案是增加一些延迟.不幸的是," 超时x "不适用于构建后事件.所以我使用了后备选项:

ping 127.0.0.1 -n 4 > NUL
Run Code Online (Sandbox Code Playgroud)

这使得它几乎可靠(~95%),但我认为这是"穷人"的解决方案.在Post-build事件脚本中看起来很荒谬.我已经向VS团队报告了这个问题.但到目前为止没有太多评论或解决方案.

所以我的问题是:有没有人有同样的问题?或者我现在有什么想要更好的解决方案?谢谢.

visual-studio nuget nuget-package .net-core .net-core-2.0

8
推荐指数
2
解决办法
2498
查看次数

RazorEngine 3.4 抛出 System.ArgumentException:带有缓存的 @Layout 和不同的模型

我有 RazorEngine 3.4 缓存问题。我有几个电子邮件模板,每个模板都相同@Layout但不同Models。它工作正常,直到我尝试使用我读过的不使用 cache: "will result in both dreadful performances and memory leaks" from here的 Cache 。

所以我打开了它。这很简单,但导致了一个问题:_Layout.cshtml它也与第一个模型类型一起缓存,当我尝试使用不同的模型解析另一个模板时,它会抛出异常:"System.ArgumentException: Object of type '....model1...' cannot be converted to type '...model2...'."

我写了 2 个单元测试"IsolatedTemplateServiceTestFixture.cs"来显示问题。第一个通过,但第二个失败,因为该TemplateService.SetModelExplicit()函数想要ModelLayout.

private Mock<ITemplateResolver> _templateResolver;

    [Test]
    public void IsolatedTemplateService_CanParseTemplateWithLayout_WithOneSerializableModels_UseCache()
    {
        _templateResolver = new Mock<ITemplateResolver>();
        var config = new TemplateServiceConfiguration()
        {
            Resolver = _templateResolver.Object
        };

        using (var service = new TemplateService(config))
        {
            _templateResolver.Setup(i => i.Resolve("test")).Returns("<html>@RenderBody()</html>"); …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing razorengine

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