前几天我遇到了一个问题,我首先认为这是Entity Framework的一个问题。我前几天发布了一个关于它的问题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);
}
}
如果我将以下代码添加到旧控制台应用程序项目的Main
方法(位于VS2015中Windows节点下的那个):
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
如您所见,第一行输出与以前不同。这就是导致实体框架出现问题的原因。
我发现不同的是项目类型,因为代码在两种情况下完全相同。我想弄清楚的是为什么。为什么在第二个场景的表达式中尝试转换?我有一段时间失踪了吗?这是新项目类型的问题吗?我正在努力教育自己,以便我可以在必要时进行调整。
答案 0 :(得分:2)
安装ASP.NET 5 RC1更新后,此问题已得到纠正。