C# 使用表达式和(Web)控制台应用程序时的特殊问题

C# 使用表达式和(Web)控制台应用程序时的特殊问题,c#,.net,lambda,visual-studio-2015,C#,.net,Lambda,Visual Studio 2015,前几天我遇到了一个问题,我最初认为是实体框架的问题。前几天我发了一个问题。从那时起,我确定这个问题与实体框架无关 考虑以下类别: public abstract class ModelBase { public Guid Id { get; set; } } public class User : ModelBase { public string Username { get; set; } } public abstract class ModelBaseConfiguratio

前几天我遇到了一个问题,我最初认为是实体框架的问题。前几天我发了一个问题。从那时起,我确定这个问题与实体框架无关

考虑以下类别:

public abstract class ModelBase
{
  public Guid Id { get; set; }
}

public class User : ModelBase
{
  public string Username { get; set; }
}

public abstract class ModelBaseConfiguration<T> where T : ModelBase
{
  public virtual void Configure()
  {
    ConfigureGuidProperty(e => e.Id);
  }

  protected void ConfigureGuidProperty(Expression<Func<T, Guid>> expression)
  {
    Debug.WriteLine(expression);
  }

  protected void ConfigureStringProperty(Expression<Func<T, string>> expression)
  {
    Debug.WriteLine(expression);
  }
}

public class UserConfiguration : ModelBaseConfiguration<User>
{
  public override void Configure()
  {
    base.Configure();
    ConfigureStringProperty(e => e.Username);
  }
}
…然后执行它,我在调试窗口中得到以下输出:

e => e.Id
e => e.Username
e => Convert(e).Id
e => e.Username
这就是我所期望的

现在,如果我在新的ConsoleApplication项目(位于VS2015中Web节点下的项目)中使用与上面列出的完全相同的代码并执行它,我将在调试窗口中获得以下输出:

e => e.Id
e => e.Username
e => Convert(e).Id
e => e.Username
如您所见,第一行输出与以前不同。这就是导致实体框架出现问题的原因


我发现不同之处在于项目类型,即两种场景中的代码完全相同。我想弄明白的是为什么。为什么在第二个场景的表达式中尝试转换?有什么东西我已经错过一段时间了吗?这是新项目类型的问题吗?我正在努力自学,以便在必要时进行调整。

安装ASP.NET 5 RC1更新后,此问题已得到纠正