【问题标题】:Peculiar Issue When Using Expressions and (Web) Console Application使用表达式和(Web)控制台应用程序时的特殊问题
【发布时间】:2015-11-13 19:32:37
【问题描述】:

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

考虑以下类:

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);
  }
}

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

UserConfiguration configuration = null;

configuration = new UserConfiguration();
configuration.Configure();

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

e => e.Id
e => e.Username

这是我所期望的。

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

e => Convert(e).Id
e => e.Username

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

我发现不同之处在于项目类型,因为两种情况下的代码完全相同。我想弄清楚的是为什么。为什么在第二种情况的表达中存在尝试转换?有什么我已经错过了一段时间了吗?这是新项目类型的问题吗?我正在努力自我教育,以便在必要时进行调整。

【问题讨论】:

    标签: c# .net lambda visual-studio-2015


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      • 2011-02-03
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 2011-04-28
      • 1970-01-01
      相关资源
      最近更新 更多