我有一堆导入Visual Studio的代码片段.就在最近,他们已停止在Intellisense中展示.
如果键盘快捷键没有在IntelliSense上显示任何其他内容,那么我可以选项卡并插入代码片段.
但是,如果代码段的键盘快捷键碰巧也会在IntelliSense中显示其他项目,则Tabbing将选择第一个项目,因此我实际上根本无法使用代码段!
有没有人有任何想法为什么IntelliSense无法列出我的代码片段快捷方式?我最近开始使用ReSharper,但这肯定不是问题吗?!
谢谢你的帮助
大卫
我有点明白为了允许延迟加载,NHibernate 需要生成一个扩展 POCO 类的代理类。所以我猜 NHibernate 需要覆盖持久化属性的实现,你必须将它们标记为虚拟。
我不明白的是为什么我必须将几乎所有其他东西也标记为虚拟。例如,我必须标记一个 IsValid 属性,该属性引用其他属性,但显然它本身不是持久的,而且奇怪的是,我必须将类可以发出的所有事件也标记为虚拟。
有谁知道这是为什么?我只是好奇。
谢谢
大卫
我刚刚下载了NHibernate的Linq提供程序,我只是有点兴奋.但我不太了解Linq语法.
我可以从这样的查询中返回整个对象:
var query = from foo in session.Linq<Kctc.BusinessLayer.Domain.Case>()
where foo.CaseNumber > 0
select foo;
Run Code Online (Sandbox Code Playgroud)
我可以选择这样一个属性:
var query = from foo in session.Linq<Kctc.BusinessLayer.Domain.Case>()
where foo.CaseNumber > 0
select foo.Id;
Run Code Online (Sandbox Code Playgroud)
但是我如何选择两个属性,例如foo.Id和foo.Bar?或者那是不可能的?
谢谢
大卫
我使用的旧数据库有一个表,其中包含一些示例信息,如下所示:
LiabilityType
134
137
140
143
146
999
001
003
006
009
Run Code Online (Sandbox Code Playgroud)
这些代码实际上包含两位信息:
因此,我想将此字段映射到实体中的两个属性。
我看过 ICompositeUserType,但这似乎是关于将两个字段映射到一个(复合)属性,而不是将一个字段映射到两个属性。
我可以看到如何创建两个实现 IUserType 的类,这些类检查此字段并将其转换为正确的属性值,但我无法弄清楚该类如何将属性转换回适当的数据库值。例如,我想对此进行映射,以便我可以创建一个可以说的 linq 查询;
.Where(x => x.ExpenseOrLiability == ExpenseOrLiability.Expense)
Run Code Online (Sandbox Code Playgroud)
这将被转换为 SQL,如下所示:
WHERE LiabilityType LIKE '1%'.
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?
我正在尝试解析表达式树并编写了以下代码:
private void TestExpressionTree()
{
Expression<Func<int, bool>> expression = x => x == 1 || x == 2;
string output = String.Empty;
HandleExpression(expression.Body, output);
Output("Output", output);
}
private void HandleExpression(Expression expression, string output)
{
switch (expression.NodeType)
{
case ExpressionType.Conditional:
HandleConditionalExpression(expression, output);
break;
case ExpressionType.OrElse:
HandleOrElseExpression(expression, output);
break;
case ExpressionType.Equal:
HandleEqualExpression(expression, output);
break;
case ExpressionType.Parameter:
HandleParameterExpression(expression, output);
break;
case ExpressionType.Constant:
HandleConstantExpression(expression, output);
break;
}
}
private void HandleConditionalExpression(Expression expression, string output)
{
ConditionalExpression conditionalExpression = (ConditionalExpression) expression;
HandleExpression(conditionalExpression.Test, output);
}
private …Run Code Online (Sandbox Code Playgroud) 我想创建一个类来执行各种与数据库相关的低级操作,但是它提供了一个非常简单的UI层接口.
此类表示特定聚合根中的一组数据,由单个ID int检索.
构造函数有四个参数:
public AssetRegister(int caseNumber, ILawbaseAssetRepository lawbaseAssetRepository, IAssetChecklistKctcPartRepository assetChecklistKctcPartRepository, User user)
{
_caseNumber = caseNumber;
_lawbaseAssetRepository = lawbaseAssetRepository;
_assetChecklistKctcPartRepository = assetChecklistKctcPartRepository;
_user = user;
LoadChecklists();
}
Run Code Online (Sandbox Code Playgroud)
UI层通过接口访问此类IAssetRegister.Castle Windsor本身可以提供ILawbaseAssetRepository和IAssetChecklistKctcPartRepository参数,但UI代码需要使用匿名类型提供其他两个:
int caseNumber = 1000;
User user = GetUserFromPage();
IAssetRegister assetRegister = Moose.Application.WindsorContainer.Resolve<IAssetRegister>(new { caseNumber, user});
Run Code Online (Sandbox Code Playgroud)
从API设计的角度来看,这是垃圾.UI层开发人员无法知道IAssetRegister需要整数和用户.他们需要知道类的实现才能使用它.
我知道我必须在这里遇到某种设计问题.谁能给我一些指示?
在以下FluentNHibernate映射中:
public LawbaseAssetMap()
{
Table("PRASSET");
Id(x => x.Id).Column("PRA_RECNUM");
Join("PRSTOCK", m =>
{
m.Fetch.Join();
m.Optional();
m.KeyColumn("PRS_ASSRN");
m.Map(t => t.Certificated).Column("PRS_CERT").CustomType("YesNo");
});
}
Run Code Online (Sandbox Code Playgroud)
我正在执行从表PRASSET到表的外连接PRSTOCK.连接位于PRSTOCK.PRS_ASSRN和PRASSET.PRA_RECNUM(主键PRASSET)之间.
如何创建等效连接,而不是加入PRASSET主键,而是加入另一个字段?
我正在使用这种形式的规格:
public static Expression<Func<User, bool>> IsSuperhero
{
get
{
return x => x.CanFly && x.CanShootLasersFromEyes;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以在表单中使用此规范:
var superHeroes = workspace.GetDataSource<User>().Where(UserSpecifications.IsSuperhero);
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何对这样的关联对象使用规范:
var loginsBySuperheroes = workspace.GetDataSource<Login>().Where(x => x.User [ ??? ]);
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,还是我需要重新考虑我的规范实施?
我的域类具有如下所示的集合:
private List<Foo> _foos = new List<Foo>();
public virtual ReadOnlyCollection<Foo> Foos { get { return _foos.AsReadOnly(); } }
Run Code Online (Sandbox Code Playgroud)
这给了我readonly集合,可以从类中修改(即使用字段_foos).
此集合映射如下(Fluent NHibernate):
HasMany(x => x.Foos).KeyColumn("ParentClassId").Cascade.All().Inverse().Access.CamelCaseField(Prefix.Underscore);
Run Code Online (Sandbox Code Playgroud)
现在当我尝试使用这个系列时,我得到:
无法转换'NHibernate.Collection.Generic.PersistentGenericBag 1[Foo]' to type 'System.Collections.Generic.List1 [Foo]' 类型的对象.
根据Unable将NHibernate.Collection.Generic.PersistentGenericBag类型的对象强制转换为List,这是因为集合需要作为接口公开给NHibernate,以便NHibernate可以注入一个自己的集合类.
本文建议使用IList,但遗憾的是这个接口不包含AsReadOnly()方法,弄乱了我的计划,只向外部世界公开一个只读集合.
任何人都可以建议我可以使用哪种界面,一种满足相同要求的不同方法,或者不涉及这种挫折的另类职业?
谢谢
大卫
collections nhibernate fluent-nhibernate readonly-collection
在我的应用我有三个班,Extractor,Transformer并且Loader,由第四类协调Coordinator.Extractor,Transformer并且Loader非常简单,并执行以下操作:
Extractor
公开名为Resultstype 的成员IEnumerable<string>,例如通过从文本文件中读取.提取应该是同步的.
Transformer
公开一个被调用的成员Transform,它接受一个字符串并通过某个过程将其转换为另一个字符串,这个过程预计很费时(在这里使用并行处理).
Loader
公开一个名为的成员Load,该成员接受一个字符串并将其加载到某个最终形式(例如另一个文本文件)中.加载应该是同步的.
这些Coordinator类协调三个操作.转换过程应该并行完成,然后将结果推送到加载程序读取的队列.Coordinator的Run()方法如下:
Extractor extractor = new Extractor();
Transformer transformer = new Transformer();
Loader loader = new Loader();
ConcurrentQueue<string> outputs = new ConcurrentQueue<string>();
Parallel.ForEach(extractor.Results, x => outputs.Enqueue(transformer.Transform(x)));
foreach(string output in outputs)
{
loader.Load(output);
}
Run Code Online (Sandbox Code Playgroud)
这样做很有效,除了必须在任何加载完成之前完成ALL转换 - 即Parallel.ForEach()在下一个foreach开始之前完成.我希望每个输出在准备就绪后立即传递给加载器.
我也试过这个:
Extractor extractor = new …Run Code Online (Sandbox Code Playgroud) c# ×4
nhibernate ×3
linq ×2
api ×1
architecture ×1
collections ×1
intellisense ×1
lazy-loading ×1
virtual ×1