Include()方法适用于对象列表.但是,如果我需要深入两个级别呢?例如,下面的方法将返回ApplicationServers,其中包含此处显示的包含属性.但是,ApplicationsWithOverrideGroup是另一个容纳其他复杂对象的容器.我也可以在该属性上执行Include()吗?或者我如何才能完全加载该属性?
现在看来,这个方法:
public IEnumerable<ApplicationServer> GetAll()
{
return this.Database.ApplicationServers
.Include(x => x.ApplicationsWithOverrideGroup)
.Include(x => x.ApplicationWithGroupToForceInstallList)
.Include(x => x.CustomVariableGroups)
.ToList();
}
Run Code Online (Sandbox Code Playgroud)
将仅填充Enabled属性(下方),而不填充Application或CustomVariableGroup属性(如下所示).我该如何实现这一目标?
public class ApplicationWithOverrideVariableGroup : EntityBase
{
public bool Enabled { get; set; }
public Application Application { get; set; }
public CustomVariableGroup CustomVariableGroup { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 是否存在使方法线程安全的整体规则/指南?我知道可能有一百万次一次性情况,但一般情况如何呢?这很简单吗?
是吗?这也适用于静态方法吗?
@Cybis提供的一个答案是:
局部变量不能在线程之间共享,因为每个线程都有自己的堆栈.
静态方法也是如此吗?
如果方法传递给引用对象,那是否会破坏线程的安全性?我做了一些研究,并且有很多关于某些情况的研究,但我希望能够通过使用一些规则来定义遵循的指导方针,以确保方法是线程安全的.
所以,我想我的最终问题是:"是否有一个简短的规则列表定义了一个线程安全的方法?如果是这样,它们是什么?"
编辑这里
有很多好处.我认为这个问题的真正答案是:"没有简单的规则来确保线程安全." 凉.精细.但总的来说,我认为接受的答案提供了一个很好的简短摘要.总有例外.就这样吧.我可以忍受这一点.
我无法让我的下拉列表工作.我可以让导航栏完美显示,但是当我点击"Dropdown"(其中任何一个)时,它不会显示下拉菜单.我试过看其他关于此的帖子,但没有解决每个人问题的问题.我直接从bootstrap的网站上复制了源码,但我似乎无法让它在我的机器上工作.有人有主意吗?我一直盯着它看了一个小时,似乎无法弄清问题是什么.
<head>
<script src="resource/js/jquery-1.11.0.js"></script>
<script src="resources/js/bootstrap.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('dropdown-toggle').dropdown()
});
</script>
</head>
<body>
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data- target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Brand</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Link</a></li>
<li><a href="#">Link</a></li>
<li class="dropdown"> …
Run Code Online (Sandbox Code Playgroud) 我习惯于Visual Studio中的WinForms编程,但我想尝试一下WPF.
我为我的项目添加了一个名为Window01的窗口.主窗口称为MainWindow.在public MainWindow()
构造函数之前,我声明了Window01:
Window01 w1;
Run Code Online (Sandbox Code Playgroud)
现在我将实例化此窗口:
private void Window_Loaded(object sender, RoutedEventArgs e)
{
w1 = new Window01();
}
Run Code Online (Sandbox Code Playgroud)
我有一个按钮,显示窗口:w1.ShowDialog();
.
这里的"有趣"事实是,如果我启动应用程序(使用调试)并在几秒钟之后退出它(我在应用程序中没有做任何事情),Visual Studio不会停止调试,就好像应用程序是仍在运行.
如果我将行移动w1 = new Window01();
到按钮单击方法,意思就在上面ShowDialog()
,Visual Studio的行为正常 - 也就是说,当我退出应用程序时调试停止.
为何这种奇怪的行为?
我在Visual Studio 2012中使用了Power Commands扩展.我选中了选项以在保存时删除和排序使用.问题是System.Xxx指令最后被排序,这导致样式分析错误:
SA1208:系统使用指令必须放在所有其他using指令之前.
保存之前:
using System;
using System.Diagnostics.CodeAnalysis;
using Foo;
Run Code Online (Sandbox Code Playgroud)
保存后:
using Foo;
using System;
using System.Diagnostics.CodeAnalysis;
Run Code Online (Sandbox Code Playgroud)
这与VS 2010正常工作(System.Xxx第一).任何人都知道如何纠正这个问题?
注意:即使它没有导致SA错误,我仍然更喜欢系统指令是第一个.
几个月前,我被介绍到新型DateTimeOffset
,很高兴DateTime
关于时区的缺陷终于得到了解决.
但是,我想知道使用这种新类型是否有任何开销或问题.
我在一个多语言环境的Web应用程序上工作.有没有人知道任何可以影响我的东西,只是在我的所有日期/时间工作中使用它?这里有滥用的窗口吗?
参考:DateTimeOffset:Justin Van Patten在.NET 3.5中的一个新的DateTime结构
有没有办法一次向ConcurrentBag添加多个项目,而不是一次添加一个?我没有在ConcurrentBag上看到AddRange()方法,但是有一个Concat().但是,这对我不起作用:
ConcurrentBag<T> objectList = new ConcurrentBag<T>();
timeChunks.ForEach(timeChunk =>
{
List<T> newList = Foo.SomeMethod<T>(x => x.SomeReadTime > timeChunk.StartTime);
objectList.Concat<T>(newList);
});
Run Code Online (Sandbox Code Playgroud)
这段代码曾经在Parallel.ForEach()中,但我把它改成了上面所以我可以解决它.变量newList确实有对象,但是在objectList.Concat <>行之后,objectList总是有0个对象.Concat <>不能那样工作吗?我是否需要使用Add()方法一次一个地向ConcurrentBag添加项目?
我知道这个问题的变体之前已被问过(甚至是我),但我仍然不明白这个问题......
据我所知,通过执行以下操作,可以检索比128默认设置更多的文档:
session.Advanced.MaxNumberOfRequestsPerSession = int.MaxValue;
Run Code Online (Sandbox Code Playgroud)
我已经知道WHERE子句应该是一个ExpressionTree而不是Func,所以它被视为Queryable而不是Enumerable.所以我认为这应该有效:
public static List<T> GetObjectList<T>(Expression<Func<T, bool>> whereClause)
{
using (IDocumentSession session = GetRavenSession())
{
return session.Query<T>().Where(whereClause).ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这只返回128个文档.为什么?
注意,这是调用上述方法的代码:
RavenDataAccessComponent.GetObjectList<Ccm>(x => x.TimeStamp > lastReadTime);
Run Code Online (Sandbox Code Playgroud)
如果我添加Take(n),那么我可以获得尽可能多的文档.例如,这会返回200个文档:
return session.Query<T>().Where(whereClause).Take(200).ToList();
Run Code Online (Sandbox Code Playgroud)
基于所有这些,似乎检索数千个文档的适当方法是设置MaxNumberOfRequestsPerSession并在查询中使用Take().是对的吗?如果没有,应该怎么做?
对于我的应用程序,我需要检索数千个文档(其中包含非常少的数据).我们将这些文档保存在内存中,并用作图表的数据源.
**编辑**
我尝试在Take()中使用int.MaxValue:
return session.Query<T>().Where(whereClause).Take(int.MaxValue).ToList();
Run Code Online (Sandbox Code Playgroud)
然后返回1024.唉.我如何获得超过1024?
**编辑2 - 显示数据的示例文档**
{
"Header_ID": 3525880,
"Sub_ID": "120403261139",
"TimeStamp": "2012-04-05T15:14:13.9870000",
"Equipment_ID": "PBG11A-CCM",
"AverageAbsorber1": "284.451",
"AverageAbsorber2": "108.442",
"AverageAbsorber3": "886.523",
"AverageAbsorber4": "176.773"
}
Run Code Online (Sandbox Code Playgroud) 在调试时,我期待两个不同的类使用相同的对象实例.这两个对象的所有属性都相同,但它们是两个不同的实例.有没有办法在VS调试器中告诉它?
为了确定,我能够在课程中添加一个字段:
private string someId = Guid.NewGuid().ToString();
Run Code Online (Sandbox Code Playgroud)
然后,在调试时,我至少可以查看两个实例中每个实例的字段.有没有更好的方法不需要创建这个虚拟ID字段?
在我对存储库模式的研究中,我一直很困惑.我想知道当他们只是意味着数据访问层时,人们是否(错误地?)使用该词.
由于在设计模式索引(GoF)中找不到"存储库" ,因此我转向了企业应用程序架构模式(Fowler).当Fowler声明客户创建一个标准对象并将其传递给存储库以获得结果时,他似乎非常清楚(第323页).它看起来像这样:
public class Person
{
public List<Person> Dependents()
{
Repository repository = Registry.personRepository();
Criteria criteria = new Criteria();
criteria.equal(Person.BENEFACTOR, this);
return repository.matching(criteria);
}
}
Run Code Online (Sandbox Code Playgroud)
条件对象是什么使存储库成为存储库?如果不是,那该怎么办?如果抽象持久化机制(并因此构造查询)是目标,那么存储库与simpe DAL/ORM调用的方式有何不同,如下所示:
public class PersonLogic
{
public List<Person> GetDependents()
{
IPersonData personData = DependencyContainer.Resolve<IPersonData>();
return personData.GetDependents();
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,区别如下:
*使用存储库模式,客户端构造不同的条件对象并在其上调用Matching()方法.
*使用简单的DAL,客户端可以根据需要调用不同的方法.
它还有更多吗?当程序员真正意味着DAL时,他们错误地使用术语"存储库"吗?
编辑
David Osborne将这个链接发送给Persistence Patterns.它指出:
基本上,Repository模式只是意味着在您的持久性系统上放置一个façade,这样您就可以保护应用程序代码的其余部分不必知道持久性是如何工作的.
这就是数据访问层的真正含义.在我看来,存储库和DAL是相同的东西,也许"真正的"存储库使用条件对象.