先日Entity Frameworkの問題と思われる問題が発生しました。私は先日それについての質問を投稿したhere。それ以来、私はこの問題がEntity Frameworkに関連していないと判断しました。式と(Web)コンソールアプリケーションを使用するときの特殊な問題
は、次のクラスを考えてみましょう:
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);
}
}
私は古いコンソールアプリケーションプロジェクト(VS2015でのWindowsノードの下に位置するもの)のMain
メソッドに次のコードを追加した場合:
UserConfiguration configuration = null;
configuration = new UserConfiguration();
configuration.Configure();
...それを実行すると、デバッグウィンドウに次の出力が表示されます。
e => e.Id
e => e.Username
これは私が期待しているものです。私は新しい ConsoleApplicationプロジェクト(VS2015でのWebノードの下に位置するもの)に上記とまったく同じコードを使用して、それを実行した場合
今、私は、デバッグウィンドウで、次のような出力が得られます。
e => Convert(e).Id
e => e.Username
ご覧のとおり、出力の最初の行は以前とは異なります。これがEntity Frameworkの問題を引き起こしています。
私は、違いはプロジェクトの種類で、コードは両方のシナリオでまったく同じであることを発見しました。私が理解しようとしているのはなぜでしょうか。第2のシナリオの表現に変換が試みられたのはなぜですか?私はしばらくの間不足していることはありますか?これは新しいプロジェクトタイプの問題ですか?私は必要に応じて調整できるように自分自身を教育しようとしています。