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

Jas*_*ier 5 .net c# lambda visual-studio-2015

前几天我遇到了一个我最初认为是Entity Framework问题的问题.我前几天在这里发了一个关于它的问题.从那时起,我确定此问题与实体框架无关.

考虑以下类:

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我下面的代码添加到Main一个的方法,的控制台应用程序项目(一个位于VS2015在Windows节点下):

UserConfiguration configuration = null;

configuration = new UserConfiguration();
configuration.Configure();
Run Code Online (Sandbox Code Playgroud)

...并执行它,我在调试窗口中得到以下输出:

e => e.Id
e => e.Username
Run Code Online (Sandbox Code Playgroud)

这就是我的期望.

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

e => Convert(e).Id
e => e.Username
Run Code Online (Sandbox Code Playgroud)

如您所见,第一行输出与以前不同.这是导致实体框架出现问题的原因.

我发现不同的是项目类型,因为代码在两种情况下完全相同.我想弄清楚的是为什么.为什么在第二个场景的表达式中尝试转换?我有一段时间失踪了吗?这是新项目类型的问题吗?我正在努力教育自己,以便我可以在必要时进行调整.

Jas*_*ier 2

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