我正在使用DBContext并且有两个类,其属性都是虚拟的.我可以在调试器中看到,当我查询上下文时,我正在获取代理对象.但是,当我尝试添加它时,collection属性仍为null.我认为代理将确保集合初始化.
因为我的Poco对象可以在其数据上下文之外使用,所以我在构造函数中添加了对集合为null的检查,并在必要时创建它:
public class DanceStyle
{
public DanceStyle()
{
if (DanceEvents == null)
{
DanceEvents = new Collection<DanceEvent>();
}
}
...
public virtual ICollection<DanceEvent> DanceEvents { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这在数据上下文之外工作但是如果我使用查询检索对象,虽然测试是真的,但是当我尝试设置它时,我得到以下异常:'类型'DanceStyle_B6089AE40D178593955F1328A70EAA3D8F0F01DDE9F9FBD615F60A34F9178B94'上的属性'DanceEvents'无法设置,因为集合已经设置为EntityCollection.
我可以看到它是null并且我无法添加它,但我也不能将它设置为集合,因为代理已经设置它.因此我无法使用它.我糊涂了.
这是DanceEvent类:
public class DanceEvent
{
public DanceEvent()
{
if (DanceStyles == null)
{
DanceStyles = new Collection<DanceStyle>();
}
}
...
public virtual ICollection<DanceStyle> DanceStyles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我从上面的代码中省略了其他值类型属性.我在上下文类中没有其他类的映射.
我注意到在各种手机上存在一个问题,即如果在stroketype设置为single时保存手势然后将stroketype更改为multi并添加一些多笔画手势,那么当你绘制它们时,GesturesOverlayView通常无法识别多个手势.这些可以是非常简单的手势,例如+或X.会发生的情况是,您绘制的手势会保持褪色,就好像它还没有被识别一样,即使它可以是一个完美的匹配.
我知道多笔画工作正常,所以我想知道问题是否是由于库中混合的问题和动态改变视图的笔画类型引起的.是否可能会在同一个库中使用单笔画手势混淆它,但因为匹配不够,只是放弃?
有没有人有类似的经历或理论可能会发生什么?
是否可以在Xml中定义ListPreference并使用getInt从SharedPreferences中检索值?这是我的Xml:
<ListPreference android:key="@string/prefGestureAccuracyKey"
android:title="@string/prefGestureAccuracyTitle" android:summary="@string/prefGestureAccuracyDesc"
android:entries="@array/prefNumberAccuracyLabels" android:entryValues="@array/prefNumberAccuracyValues"
android:dialogTitle="@string/prefGestureAccuracyDialog"
android:persistent="true" android:defaultValue="2"
android:shouldDisableView="false" />
Run Code Online (Sandbox Code Playgroud)
我希望得到的值类似于:int val = sharedPrefs.getInt(key,defaultValue).
目前我必须使用getString并解析结果.
我必须编写一个名为Microsoft Dynamics CRM Web服务的控制台应用程序,以对超过八千个CRM对象执行操作.Web服务调用的细节是无关紧要的,这里没有显示,但我需要一个多线程客户端,以便我可以并行调用.我希望能够控制配置设置中使用的线程数,并且如果服务错误的数量达到配置定义的阈值,则应用程序也可以取消整个操作.
我使用任务并行库Task.Run和ContinueWith编写它,跟踪正在进行的调用(线程)数,我们收到了多少错误,以及用户是否已从键盘取消.一切都运行良好,我有大量的日志记录,以确保自己的线程干净整洁,并且在运行结束时一切都很整洁.我可以看到程序正在并行使用最大线程数,如果达到了我们的最大限制,则等到运行任务完成后再启动另一个.
在我的代码审查期间,我的同事建议最好使用async/await而不是任务和continuation,所以我创建了一个分支并以这种方式重写它.结果很有趣 - 异步/等待版本几乎慢两倍,并且它从未达到允许的并行操作/线程的最大数量.TPL总是并行获得10个线程,而async/await版本从未超过5个.
我的问题是:我在编写async/await代码(或甚至是TPL代码)方面犯了错误吗?如果我没有编写错误,你能解释为什么async/await效率较低,这是否意味着最好继续使用TPL进行多线程代码.
请注意,我测试过的代码实际上并没有调用CRM - CrmClient类只是在配置中指定的持续时间内线程休眠(5秒)然后抛出异常.这意味着没有可能影响性能的外部变量.
出于这个问题的目的,我创建了一个结合两个版本的精简程序; 调用哪个是由配置设置决定的.它们中的每一个都以一个引导运行器开始,它设置环境,创建队列类,然后使用TaskCompletionSource等待完成.CancellationTokenSource用于发信号通知用户取消.要处理的ID列表从嵌入文件中读取并推送到ConcurrentQueue.他们都开始调用StartCrmRequest和max-threads一样多次; 随后,每次处理结果时,ProcessResult方法再次调用StartCrmRequest,继续执行直到处理完所有ID.
您可以从这里克隆/下载完整的程序:https://bitbucket.org/kentrob/pmgfixso/
以下是相关配置:
<appSettings>
<add key="TellUserAfterNCalls" value="5"/>
<add key="CrmErrorsBeforeQuitting" value="20"/>
<add key="MaxThreads" value="10"/>
<add key="CallIntervalMsecs" value="5000"/>
<add key="UseAsyncAwait" value="True" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
从TPL版本开始,这里是启动队列管理器的bootstrap运行器:
public static class TplRunner
{
private static readonly CancellationTokenSource CancellationTokenSource = new CancellationTokenSource();
public static void StartQueue(RuntimeParameters parameters, IEnumerable<string> idList)
{
Console.CancelKeyPress += (s, args) =>
{
CancelCrmClient();
args.Cancel = true;
};
var start = DateTime.Now;
Program.TellUser("Start: " + start);
var …Run Code Online (Sandbox Code Playgroud) 我无法使用Android API示例中显示的标准InputStreamReader方法将扩展字符(例如法语重音字符)读写到文本文件中.当我使用以下方式回读文件时:
InputStreamReader tmp = new InputStreamReader(in);
BufferedReader reader = new BufferedReader(tmp);
String str;
while ((str = reader.readLine()) != null) {
...
Run Code Online (Sandbox Code Playgroud)
字符串读取在扩展字符处被截断,而不是在行尾.然后字符串的后半部分出现在下一行.我假设我需要将我的数据保存为UTF-8,但我找不到任何这样的例子,而且我是Java的新手.
任何人都可以向我提供相关文档的示例或链接吗?
根据C#规范,这是有效的代码,它编译并运行.
var myObj = new MyClass();
var x = nameof(myObj.SomeEvent);
Console.Write(x); // Prints 'SomeEvent'
Run Code Online (Sandbox Code Playgroud)
SomeEvent在哪里:
public event EventHandler SomeEvent;
Run Code Online (Sandbox Code Playgroud)
但ReSharper发出警告:
"事件SomeEvent只能出现在+ =或 - =的左侧"
我在"选项">"检查严重性"中找不到抑制此方法的方法.这是ReSharper中的错误吗?
我刚刚开始与NodaTime合作.在我的应用中,用户创建一个事件并选择一个时区.无论我是使用BCL(Windows)时区列表还是TZDB(Olson)列表(并且不混合它们!),我都需要将时区的id保存到我的数据库中,以便稍后我可以重新创建时区 - 意识到时间.
鉴于时区ID似乎有点武断,并且不是ISO标准,我可以依赖总是在调用GetZoneOrNull时找到该ID吗?
我假设GetZoneOrNull方法是对这种情况的防御; 也就是说,当它传递一个在自己的Ids集合中不存在的id时.我的问题是:如果从Ids集合中检索到一个id,我可以相信GetZoneOrNull将来永远不会返回null吗?
但如果一个Id可以从历史中消失,那么处理这个问题的最佳策略是什么?
我正在使用TypeScript版本2.0.3 的AutoMapper包,但是当我尝试导入它时,我总是得到错误"'automapper-ts'不是模块":
如果我查看定义文件,它会以:
declare module AutoMapperJs {
Run Code Online (Sandbox Code Playgroud)
它包含导出语句.
如果我将import语句更改为this,它将编译:
import {} from 'automapper-ts/dist/automapper';
Run Code Online (Sandbox Code Playgroud)
但后来我没有得到一个Require语句,并且在运行时找不到全局的automapper静态变量.为了使它工作,我必须用引用替换import语句:
/// <reference path="../../node_modules/automapper-ts/dist/automapper.d.ts" />
Run Code Online (Sandbox Code Playgroud)
然后添加手动JavaScript链接:
<script src="lib/automapper-ts/dist/automapper.js"></script>
Run Code Online (Sandbox Code Playgroud)
谁能解释我做错了什么?