小编Dav*_*vid的帖子

IntelliSense忘记了我的代码片段!

我有一堆导入Visual Studio的代码片段.就在最近,他们已停止在Intellisense中展示.

如果键盘快捷键没有在IntelliSense上显示任何其他内容,那么我可以选项卡并插入代码片段.

但是,如果代码段的键盘快捷键碰巧也会在IntelliSense中显示其他项目,则Tabbing将选择第一个项目,因此我实际上根本无法使用代码段!

有没有人有任何想法为什么IntelliSense无法列出我的代码片段快捷方式?我最近开始使用ReSharper,但这肯定不是问题吗?!

谢谢你的帮助

大卫

intellisense visual-studio code-snippets

5
推荐指数
1
解决办法
3550
查看次数

NHibernate:为什么必须将非持久性属性标记为虚拟以进行延迟加载

我有点明白为了允许延迟加载,NHibernate 需要生成一个扩展 POCO 类的代理类。所以我猜 NHibernate 需要覆盖持久化属性的实现,你必须将它们标记为虚拟。

我不明白的是为什么我必须将几乎所有其他东西也标记为虚拟。例如,我必须标记一个 IsValid 属性,该属性引用其他属性,但显然它本身不是持久的,而且奇怪的是,我必须将类可以发出的所有事件也标记为虚拟。

有谁知道这是为什么?我只是好奇。

谢谢

大卫

nhibernate virtual lazy-loading

5
推荐指数
0
解决办法
1162
查看次数

如何从linq查询中返回某些属性,而不是完整对象?

我刚刚下载了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?或者那是不可能的?

谢谢

大卫

linq nhibernate linq-to-nhibernate

5
推荐指数
1
解决办法
97
查看次数

FluentNHibernate 将一列映射到两个属性:这可能吗?

我使用的旧数据库有一个表,其中包含一些示例信息,如下所示:

LiabilityType
134
137
140
143
146
999
001
003
006
009
Run Code Online (Sandbox Code Playgroud)

这些代码实际上包含两位信息:

  1. 债务是否归类为费用或负债(如果代码以“1”开头 -> 费用;如果以“0”开头 -> 负债
  2. 债务类型(例如抵押贷款、丧葬费、透支等)

因此,我想将此字段映射到实体中的两个属性。

我看过 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)

这样的事情可能吗?

nhibernate-mapping fluent-nhibernate

5
推荐指数
1
解决办法
920
查看次数

C#:字符串参数被神秘地重置为空 - 请帮忙!

我正在尝试解析表达式树并编写了以下代码:

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)

c# pass-by-reference expression-trees

5
推荐指数
2
解决办法
592
查看次数

架构问题:使用依赖注入导致垃圾API

我想创建一个类来执行各种与数据库相关的低级操作,但是它提供了一个非常简单的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需要整数和用户.他们需要知道类的实现才能使用它.

我知道我必须在这里遇到某种设计问题.谁能给我一些指示?

c# architecture api dependency-injection castle-windsor

5
推荐指数
1
解决办法
567
查看次数

FluentNHibernate:如何在不使用主键的情况下加入表

在以下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_ASSRNPRASSET.PRA_RECNUM(主键PRASSET)之间.

如何创建等效连接,而不是加入PRASSET主键,而是加入另一个字段?

nhibernate-mapping fluent-nhibernate

5
推荐指数
1
解决办法
1998
查看次数

Linq:如何针对关联对象使用规范

我正在使用这种形式的规格:

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)

有没有办法做到这一点,还是我需要重新考虑我的规范实施?

c# linq expression-trees specification-pattern

5
推荐指数
1
解决办法
531
查看次数

NHibernate可以使用的只读集合属性

我的域类具有如下所示的集合:

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

4
推荐指数
2
解决办法
2819
查看次数

如何将Parallel.ForEach的结果发布到在C#中不断读取的队列

在我的应用我有三个班,Extractor,Transformer并且Loader,由第四类协调Coordinator.Extractor,Transformer并且Loader非常简单,并执行以下操作:

Extractor

公开名为Resultstype 的成员IEnumerable<string>,例如通过从文本文件中读取.提取应该是同步的.

Transformer

公开一个被调用的成员Transform,它接受一个字符串并通过某个过程将其转换为另一个字符串,这个过程预计很费时(在这里使用并行处理).

Loader

公开一个名为的成员Load,该成员接受一个字符串并将其加载到某个最终形式(例如另一个文本文件)中.加载应该是同步的.

这些Coordinator类协调三个操作.转换过程应该并行完成,然后将结果推送到加载程序读取的队列.CoordinatorRun()方法如下:

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# parallel-processing task-parallel-library

4
推荐指数
1
解决办法
1494
查看次数