我有一个非常嵌套的模型,我想用假数据创建数千个模型。但是,模型中的某些属性也需要在特定范围内或具有特定规则。我查看了这两个假数据生成器:
AutoFixture似乎只会为所有内容生成虚假数据。
Bogus可以为属性设置诸如范围之类的规则,但所有其他属性仍为空 - 或者您必须为所有属性定义规则。
我是否遗漏了什么,或者不可能用假数据填充模型并且只为特定属性设置规则?
我正在运行一个线程
while(isRunning)
{
blockingCollection.Take()
}
Run Code Online (Sandbox Code Playgroud)
首先我设置isRunning为false。然后我调用thread.Interrupt它阻止blockingCollection等待新项目。之后,我Dispose为在 catch 块内运行线程的类调用我的方法。
这是最好的/正确的方法吗?
我有一个使用 .net core 2.0 和 EntityFrameworkCore、Docker 和 SQL Server 的项目。
我无法让迁移工作。当我尝试时Add-Migration InitialCreate,出现以下错误:
启动项目 'docker-compose' 是一个 Docker 项目。选择一个 ASP.NET Core Web 应用程序作为您的启动项目,然后重试。
我什至没有 asp.net web 应用程序,只有一个 .net 核心控制台程序。如何启用迁移?
如果我将启动项目更改为控制台应用程序,我会得到:
无法创建类型为“ApplicationDbContext”的对象。将“IDesignTimeDbContextFactory”的实现添加到项目中,或参阅https://go.microsoft.com/fwlink/?linkid=851728 了解设计时支持的其他模式。
我希望我能在第一次尝试时就得到正确的解释:
我有一个Dictionary<int, Action> MyActions。我有一个看起来像这样的方法:
int actionNumber = 0;
while (isRunning) {
if (Phases.TryGetValue(actionNumber, out var action))
{
action.Invoke();
}
actionNumber++;
}
Run Code Online (Sandbox Code Playgroud)
这个想法是,只要前面的方法完成,这些方法就会依次运行。当出现错误时,我保存了 actionNumber,这样我就可以返回到正确的最后一个方法并从那里继续。
我放入字典中的方法最初只是简单的 void 方法。现在我发现自己还必须将异步方法放在那里,因为其中一些方法体内有等待。这意味着字典必须在其中保留 void 方法和异步任务方法。while 循环必须有一个等待,否则当它运行异步任务方法时它将继续。
我的解决方案:
解决方案A:
将字典设为a Dictionary<int, Task> MyActions,并将所有内容设为任务,即使它是一个简单的void 方法。将 while 循环更改为:
int actionNumber = 0;
while (isRunning) {
if (Phases.TryGetValue(actionNumber, out var task))
{
Task.Run(() => task).Wait();
}
actionNumber++;
}
Run Code Online (Sandbox Code Playgroud)
解决方案 B: 保持一切不变。将异步任务方法包装到另一个 void 方法中,该方法本身等待任务方法。将此 void 方法放入操作字典中。
方案C: 将所有的async Task Method转为void Method,并重写await为.Result。
还有其他更好的解决方案吗?我倾向于选择解决方案 A,因为其他开发人员更容易查看字典并清楚地看到所有内容都必须是任务。
c# ×3
.net ×1
.net-core ×1
architecture ×1
autofixture ×1
bogus ×1
docker ×1
mocking ×1
sql-server ×1
testing ×1