余分な部分クラスを使用してEF自動生成クラスに追加のプロパティを追加すると、データベースに対してクエリを実行するときにこれらのプロパティが設定されたり埋められません。Entity Frameworkの余分なプロパティがDbContext.Database.SqlQueryによって生成されない
例:
自動生成クラスPerson:
"SELECT *, (FirstName + LastName) AS DisplayName FROM [Person]"
と使用:
public partial class Person
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
私自身の部分クラス
public partial class Person
{
public string DisplayName{ get; set; }
}
私は次のクエリを作ります
DbContext.Database.SqlQuery(typePerson, SQL, null)
Id、FirstNameおよびLastNameにはDisplayNameは設定されません。
しかし、私はMyPerson
public partial class MyPerson
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string DisplayName{ get; set; }
}
と呼ばれる全く新しいクラスを作成し、DisplayNameにも同様に移入されMyPersonの種類で同じクエリを実行します。
私はこの問題を解決する方法を教えてもらえますか。誰かが新しいクラス/タイプを作成するのではなく、部分的に使うことができます。
ダウンロード例:https://www.dropbox.com/s/dayrv0jzuoju9q3/StackOverflow_EF_ExtraProperties.zip?dl=0
UPDATE 2015年12月28日: 他のStackOverflowとCodeProjectのフォーラムを通じて読みながら、私はそれが仕事を得るために別の方法を見つけました:
1)Typebuilderを使用して( http://www.codeproject.com/Articles/206416/Use-dynamic-type-in-Entity-Framework-SqlQuery)しかし、すべての種類のプロジェクトの依存関係のために、私はすでに作成された型を見つけてメモリを吹き飛ばすのに問題がありました。
2)これまでのベストオプション:継承を使用する。
私はこの線で別のクラスを作成する場合:
class Person_Reflect : Person { }
私は、次のコードを使用することができます(それはEDMXファイルと使用反射のマッピングを無視します:
List<EF.Person> listPerson = dbEntities.Database.SqlQuery<EF.Person_Reflect>(sql, new object[] { }).ToList<EF.Person>();
です:
は、私は次のコードを使用することができます(それはEDMXファイルと使用反射のマッピングを無視します) 'Person'の2番目の部分クラスが正しい名前空間にあることを確認してください。 –
モデルを変更したので例外はありません。 – dotctor
DisplayNameは値のないプロパティとして表示されますか? –