我在两个不同的数据库(具有相同的上下文)之间导入数据.
所以我有两个不同的背景.目标是将上下文A的一些数据导入上下文B.
从不直接编辑上下文B中的数据,它们仅从上下文A导入.在上下文B中,我将复制从中导入它的ID.
现在我正在尝试检索列表中所有不在上下文B中或具有更新版本的数据.
我在两个表中有一个ModifiedAt"字段,让我知道该字段是否已被修改.
这是我目前的代码:
//Here I get all my current data in the context B with their modification time
Dictionary<int,DateTime> currentItems = contextB.Dossiers.ToDictionary(d=>d.MatchingReferenceId, d=>d.ModifiedAt);
//And here the pain starts:
contextA.Dossiers.Where(da=> !currentItems.Keys.Contains(da.Id) || currentItems.FirstOrDefault(db=>db.Key == da.Id).Value <da.ModifiedAt)//And I'm looping on it with a foreach.
Run Code Online (Sandbox Code Playgroud)
第一部分(我检查上下文B是否包含元素)工作,第二部分,我得到了这个例外:
Unable to process the type 'System.Collections.Generic.KeyValuePair`2[]', because it has no known mapping to the value layer.
Run Code Online (Sandbox Code Playgroud)
但我不能做更简单的Id和修改时间之间的这个链接(在开始时,我从其他上下文有一个POCO类,我也试过匿名类型,相同的结果)
我错过了什么?
编辑1
我也用完全相同的结果尝试了这个:contextA.Dossiers.Where(da =>!currentItems.Keys.Contains(da.Id)|| currentItems.Any(db => db.Key == da.Id && db.值
编辑2
我试过lambda,但在这里它不喜欢同时使用两个上下文:
var myList = (from …Run Code Online (Sandbox Code Playgroud) 我有一个WPFapplication(.Net 3.5),它使用IDataErrorInfoViewModel来验证输入.
它运行良好,用户控制获得正确的UI反馈.
问题是用户仍然可以更改所选元素,或保存此元素.
所以我的问题是:我怎么知道我的所有财产都有效?或者至少我所有显示的值都是有效的.目标是IsActive在这个结果上绑定一些
我有一个小单元测试来测试循环依赖.
我的目标如下:
[ProtoContract]
public class Node
{
[ProtoMember(1)]
public String Name { get; set; }
[ProtoMember(2,AsReference = true)]
public List<Node> Childs { get; set; }
public Node()
{
Childs = new List<Node>();
}
}
Run Code Online (Sandbox Code Playgroud)
以下服务:
[ServiceContract]
public interface INodeService : IService
{
[OperationContract]
Task<Node> GetCyclicNodes();
}
public class NodeService : Service, INodeService
{
public async Task<int> Add(int a, int b)
{
return a + b;
}
public async Task<Node> GetCyclicNodes()
{
Node nodeA = new Node() {Name = "Node A"}; …Run Code Online (Sandbox Code Playgroud) 在报告中,我有一个带过滤器的数据集(基于MultiValue参数).
此数据集包含两个字段:Id和Name.
我需要在某处显示所有名称的串联:
Name1 / Name2 / Name3
Run Code Online (Sandbox Code Playgroud)
问题是该join方法仅适用于数组,然后我不能将数据集指定为值.
我也查看了自定义代码,但我没有找到任何工作.
我该怎么做?
我有以下代码来读取来自网络的多播消息,用于指定的IP +端口
private static void ReceiveMessages(int port, string ip, CancellationToken token)
{
Task.Factory.StartNew(() =>
{
using (var mUdpClientReceiver = new UdpClient())
{
var mReceivingEndPoint = new IPEndPoint(IPAddress.Any, port);
mUdpClientReceiver.ExclusiveAddressUse = false;
mUdpClientReceiver.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
mUdpClientReceiver.ExclusiveAddressUse = false;
mUdpClientReceiver.Client.Bind(mReceivingEndPoint);
mUdpClientReceiver.JoinMulticastGroup(IPAddress.Parse(ip), 255);
while (!token.IsCancellationRequested)
{
byte[] receive = mUdpClientReceiver.Receive(ref mReceivingEndPoint);
Console.WriteLine("Message received from {0} ",mReceivingEndPoint);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我有两个网络适配器,我从这个多播ip +端口发送数据(由两个wireshark实例监控每个网络适配器确认).对于两个网卡,我在wireshark上看到很多流量来自那些端口+ IP).
问题是在我的控制台上,我只看到来自一个网卡的消息.
我用netstat双重检查,我的端口上没有任何其他软件监听:

那么为什么我只从我的两张网卡中获取流量呢?
编辑:
我甚至尝试了以下方法:
private static void ReceiveMessages(int port, string ip, CancellationToken token, IEnumerable<IPAddress> ipAddresses)
{
foreach (IPAddress …Run Code Online (Sandbox Code Playgroud) 我有一些桌子/图表.我为他们添加了系列.每个系列都用颜色标识.
我正在寻找如何为我添加到我的系列中的系列选择最佳颜色.
根据已经使用的颜色,目标是获得下一个最佳颜色.由于我可以添加/删除系列,我不能只有一个颜色数组并在列表中选择下一个颜色.
我听说有一些MS指南(只发现这相当于excel)
任何想法/链接/方法来做到这一点?
编辑:发现这提供了有关颜色对比的有趣信息
编辑2:我尝试使用"颜色色调轮":我只将轮子除以我需要的颜色数量,然后在位置开始处采用颜色.如果我们想要以不同的颜色开始,我还提供了一种放置偏移的方法.
它有效,我有不同的颜色,但我的印象是我们可以做得更好.例如210°的偏移,6种颜色,我是那些颜色:
我认为这只是一种视错觉,但最后两种颜色似乎比其他颜色更接近.问题是我要处理用户的眼睛.
整个"Hue"看起来像这样
通过眼睛,我们可以看到有些颜色看起来比其他颜色更像(如青色).对我来说绿色似乎比黄色更大,......
似乎它存在一种颜色是感知线性颜色的概念,你知道是否有一种算法允许我得到一个感知线性颜色数组?然后很容易采取我需要的颜色
我有一个使用Tasks的应用程序.我们还修改了cultureInfo(我们使用EN-US语言,但保留日期/数字格式),我们使用.Net 4.0.
应用程序有很多线程和任务,我们有一个工厂来创建任务/线程.
对于该线程,我们有以下代码,以确保使用正确的CurrentCulture启动每个线程:
//This is basically only the constructor, but it describe well how we create the Thread:
public MonitoredThread(ThreadStart threadStart, string name, bool isBackground = false)
{
m_threadStart = threadStart;
m_name = name;
m_isBackground = isBackground;
Thread = new Thread(ThreadWorker)
{
Name = name,
IsBackground = isBackground,
CurrentCulture = CustomCultureInfo.CurrentCulture,
CurrentUICulture = CustomCultureInfo.CurrentCulture
};
}
Run Code Online (Sandbox Code Playgroud)
但是对于Tasks,我不知道如何实现这种机制:
public static Task ExecuteTask(Action action, string name)
{
MonitoredTask task = new MonitoredTask(action, name);
return Task.Factory.StartNew(task.TaskWorker);
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
我有生产者/消费者的问题.目前我有一个简单的Queue包围着lock.
我试图用更高效的东西取代它.
我的第一选择是使用a ConcurrentQueue,但我没有看到如何让我的消费者等待下一个生成的消息(不做Thread.Sleep).
此外,如果大小达到特定数量,我希望能够清除整个队列.
您能否建议一些符合我要求的现有课程或实施?
直到最近,我们才在 Jenkins 中构建没有任何“管道”的解决方案,所以我目前正在将我们的构建移动到多分支管道。
我遇到的问题是我们的解决方案有很多结构(很多子文件夹,有时还有一些大牌)。
目前,詹金斯管道提取文件夹中的所有内容,如下所示:
D:\ws\ght-build_feature_pipelines-TMQ33LB5OQIQ5VXVMFKFDG2HWCD4MUOGEGUWJUOMZ5D2GI42BIQA
这是很长的,现在我们达到了 260 个字符的限制MSBuild:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2991,5):错误 MSB3553:资源文件“obj\Release\xx.aaaaaaaaaa。 yyy.bbbbbb.dddddddddddddd.yyyyyyy.vvv.dddddddddd.Resources.resources”的名称无效。项目元数据“%(FullPath)”不能应用于路径“obj\Release\xx.aaaaaaaaaa.yyy.bbbbbb.dddddddddddddd.yyyyyyy.vvv.dddddddddd.Resources.resources”。指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。[D:\ws\ght-build_feature_pipelines-TMQ33LB5OQIQ5VXVMFKFDG2HWCD4MUOGEGUWJUOMZ5D2GI42BIQA\Src\bbbbbb\dddddd\dddddddddddddd\yyyyyyy\xx.adaddadddddbbbb.ydyddddddbbbb.
我们有太多长度很大的情况,以至于重构所有内容确实是一项艰巨的工作,所以我正在研究如何为 jenkins 指定一条更小的路径?
我们在不同的程序集中进行了大量测试(6000+)。我们使用 Nunit 测试适配器在本地 Azure 代理上运行它们。
这花了很长时间,所以我们激活了 runInParallel。
yaml 步骤现在如下:
- task: VSTest@2
timeoutInMinutes: 300
inputs:
testSelector: 'testAssemblies'
testAssemblyVer2: '*.Test*.dll'
searchFolder: '$(System.DefaultWorkingDirectory)/$(buildConfiguration)'
codeCoverageEnabled: false
platform: 'Any CPU'
uiTests: false
configuration: '$(buildConfiguration)'
rerunFailedTests: false
pathtoCustomTestAdapters: 'Solution/packages/NUnit3TestAdapter.3.12.0/build/net35'
minimumExpectedTests: 1000
runInParallel: true
distributionBatchType: basedOnAssembly
failOnMinTestsNotRun: true
resultsFolder: 'testResults'
runSettingsFile: '$(Build.SourcesDirectory)\azure-tests.runsettings'
#continueOnError: true
Run Code Online (Sandbox Code Playgroud)
现在,我们得到了一些未通过的测试。我分析了其中一个,基本上,它失败了,因为在某些时候,它执行了OfType<SomeInterface>. 集合中的对象确实实现了这个接口,所以我想我一定有这个程序集加载两次的问题,并且这个接口不被认为与创建的对象相同。
当我检查日志时,我现在看到了这一点,这似乎证实了这个理论:
##[warning]RunMessage : Exception NUnit.Engine.NUnitEngineUnloadException, Exception thrown unloading tests from C:\DevOp\2\s\debug\Acceptance.Tests.dll
##[warning]RunMessage : Exception encountered unloading application domain
##[warning]RunMessage : at NUnit.Engine.Services.DomainManager.DomainUnloader.Unload()
at NUnit.Engine.Runners.TestDomainRunner.UnloadPackage()
at NUnit.Engine.Runners.AbstractTestRunner.Dispose(Boolean disposing)
at …Run Code Online (Sandbox Code Playgroud) c# ×5
.net ×3
concurrency ×1
cultureinfo ×1
datacontext ×1
jenkins ×1
linq ×1
nunit ×1
nunit-3.0 ×1
protobuf-net ×1
report ×1
reporting ×1
sockets ×1
sql ×1
ssrs-2008 ×1
udp ×1
udpclient ×1
validation ×1
wcf ×1
winforms ×1
wpf ×1