小编lad*_*dge的帖子

更新闭包表的最佳方法是什么?

我有一个表使用邻接列表方法(表A)关联记录,另一个表使用闭包表(表B)关联相同的记录.它们都捕获相同的图形,因此它们都需要保持同步.

问题是,更新闭包表的最佳方法是什么?

我认为,有三种选择:

  1. 触发.在A上的INSERT/UPDATE/DELETE中,运行一个计算新闭包的sproc. 缺点:更改为A会导致长时间的同步(锁定?)操作; 可能的死锁(?).
  2. 应用代码.缩小A中的更改以添加/更新/删除方法(例如,存储库模式),并通过调用计算新闭包的sproc来重载它们. 缺点: DB的额外往返; 如果另一个thead同时以相反的方式修改AB,则可能存在完整性问题; 例如,如果另一个应用程序决定修改A而不是B,则可能存在完整性问题.
  3. 背景更新程序.编写一个辅助进程,不断查找A的更新,并对闭包表进行相应的更新. 缺点:复杂(写入和管理的额外服务); 没有同步的窗口.

即使没有"最佳"选项,任何关于权衡的想法都将受到最大的赞赏!

sql sql-server triggers transitive-closure-table

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

AutoFixture 2使用()不能像在AutoFixture 1中那样工作吗?

我正在将我的测试移植到AutoFixture 2.0,并且我遇到了一些我无法解释或解决的奇怪行为.这个简单的测试对我失败了:

var autoFixtures = new Fixture();
var file = autoFixtures.Build<File>()
                       .With(f => f.Name, "bleh.txt")
                       .CreateAnonymous();

Assert.That(file.Name, Is.EqualTo("bleh.txt"));  // Fail?!
Run Code Online (Sandbox Code Playgroud)

如果我Name改为另一个属性,测试成功File,这导致我认为我有一些自定义存在,Name因为当我使用AutoFixture 1.0时,该工作无效.不过,我已经搜索过我的代码了,我找不到那样的东西.

启用跟踪似乎没有多大帮助.

autoFixtures.Behaviors.Add(new TracingBehavior());
Run Code Online (Sandbox Code Playgroud)

显示,以及其他东西:

Requested: System.String Name
    Requested: Ploeh.AutoFixture.Kernel.SeededRequest
    Created: Ploeh.AutoFixture.Kernel.NoSpecimen
  Requested: Ploeh.AutoFixture.Kernel.SeededRequest
    Requested: System.String
    Created: Ploeh.AutoFixture.Kernel.NoSpecimen
    Requested: System.String
    Created: 8a022fda-fa4e-49b7-b0c2-285fef765386
  Created: Name8a022fda-fa4e-49b7-b0c2-285fef765386
Created: Name8a022fda-fa4e-49b7-b0c2-285fef765386
Run Code Online (Sandbox Code Playgroud)

FWIW Name被声明为File基类的虚拟属性,然后被覆盖File:

public abstract class Item
{
    public virtual string Name { get; set; }
    ...
}

public class File …
Run Code Online (Sandbox Code Playgroud)

autofixture

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

在WebApi中,我应该在哪里调用ActionFilter之间保存数据?

我有一个ActionFilterAttribute,可以在目标操作之前和之后执行一些操作.我想保存Executing调用中使用的Executed调用状态 - 但是我应该在哪里保存这些数据?

我希望这样的事情:

public override void OnActionExecuting(HttpActionContext actionContext)
{
    actionContext.SavedState = Precomputation();
}

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
    var pre = actionExecutedContext.ActionContext.SavedState;
    Postcomputation(pre);
}
Run Code Online (Sandbox Code Playgroud)

SavedState实际上并不存在的,当然.我应该用什么呢?

.net asp.net-mvc-4 asp.net-web-api

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

GitVersion 的 +semver 命令如何工作?

我正在尝试使用GitVersion+semver:patch命令来更改我的补丁版本号,但它没有按我预期的方式工作。

我的master分支上有一个标签“2.2.0”。我在我的开发分支上做出了以下承诺:

b5d9f141  (HEAD -> develop, origin/develop) +semver:patch
75122489  Added unit test. +semver:patch
3b4e7eef  (tag: 2.2.0, origin/master, master) Merge branch 'release/2.2.0'
Run Code Online (Sandbox Code Playgroud)

我正在关注GitFlow。在最近两次提交之后,我希望我的版本报告为 2.3.2,但 GitVersion 仍然将其报告为 2.3.0。

"主要次要补丁":"2.3.0"

它是如何+semver工作的,有没有什么方法可以按照我想要的方式仅使用提交消息来提高活动版本号(即无需手动标记)?

git git-flow gitversion

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

如何在 Travis CI 上构建 Visual Studio 2019 项目?

Travis CI 最近在其构建系统中添加了一个Windows 操作系统选项。不幸的是,预装的软件包仅包含 Visual Studio 2017。

如何在 Travis 上构建 Visual Studio 2019 项目(例如 .Net Core 3.1 和 v142 构建工具项目)?

travis-ci visual-studio-2019

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

IIS7网站的元数据库密钥在哪里?

我正在尝试设置我的网站设置项目的自动(夜间)安装.我可以在命令行中指定一些安装时值; 特别是,添加TARGETSITE值定义了我的新部署将要访问的网站.

如何在IIS7安装中找到我的网站的元数据库密钥(例如"/ LM/W3SVC/213548468")?(我确实已经设置了IIS6兼容性,但我在metabase.xml文件中找不到关于我的站点的任何信息.)

此外,由于Web部署安装项目显然是过时的机制(我猜它们太容易使用?),有没有人对我的夜间自动部署有更好的想法?

installer continuous-integration iis-7 metabase

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

为什么添加返回类型会阻止我使用方法组语法?

我正在尝试在lambda表达式中使用方法组,如下所示:

public class Foo { public void Hello(string s) { } }

void Test()
{
    // this works as long as Hello has a void return type
    Func<Foo, Action<string>> a = foo => foo.Hello;
}
Run Code Online (Sandbox Code Playgroud)

当我改变的返回类型Helloint,不过,我得到

'Bar.Hello(string)'的返回类型错误.

我试过用Func它代替Action,但这似乎阻止我使用方法组语法.

有任何想法吗?

(我的目标,fwiw,是能够引用具有不同返回类型和大量字符串参数的众多方法.我甚至不想打电话给它们 - 我只想反思它们的属性.我喜欢安全性然而,lambda只是键入方法名称字符串.)


编辑:澄清我想要使用的原因Action<string>:int在我的例子中可能是多种类型中的任何一种.我尝试模仿那种类型 -

void Set<T>(Func<Foo, Func<string, T>> a) { }
void Test() { Set(foo => foo.Hello); }  // fails
Run Code Online (Sandbox Code Playgroud)

- 但是编译器无法派生T(大概是出于同样的原因我不能在返回类型上重载?).

还有其他想法吗?只要我能让编译器检查该方法组的名称,我就不会在这种情况下反对一些疯狂的反思.

c# lambda method-group

3
推荐指数
2
解决办法
1419
查看次数

为什么AutoFixture不能使用StringLength数据注释?

我正在尝试再次升级到AutoFixture 2,我遇到了对象上的数据注释问题.这是一个示例对象:

public class Bleh
{
    [StringLength(255)]
    public string Foo { get; set; }
    public string Bar { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个匿名Bleh,但带有注释的属性将变为空,而不是使用匿名字符串填充.

[Test]
public void GetAll_HasContacts()
{
    var fix = new Fixture();
    var bleh = fix.CreateAnonymous<Bleh>();

    Assert.That(bleh.Bar, Is.Not.Empty);  // pass
    Assert.That(bleh.Foo, Is.Not.Empty);  // fail ?!
}
Run Code Online (Sandbox Code Playgroud)

根据Bonus Bits,StringLength应该从2.4.0开始支持,但即使它不受支持,我也不会期望一个空字符串.我正在使用NuGet的 v2.7.1 .我是否错过了创建数据注释对象所需的某种自定义或行为?

autofixture data-annotations

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

为什么PostSharp会在构建服务器上跳过我的一个项目?

我最近通过NuGet升级了PostSharp并且它已停止工作,但仅限于非常精选的情况.它在我的构建服务器(TeamCity)上不起作用,并且它不仅适用于我的一个项目.其他项目都正确转换.

我可以改变什么才能在我的一个项目中失去PostSharp转换?

.net teamcity postsharp

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

Microsoft Bot Framework中的"自定义提示"是什么?

从版本3.8开始,Bot Framework现在包含了一些像这样的消息:

从版本3.8开始,不推荐使用DialogAction.validatedPrompt().请考虑使用自定义提示.

我在文档中没有看到任何提及.什么是"自定义提示",哪里可以了解有关如何改进已弃用功能的更多信息?

node.js botframework

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