私は LINQ と Entity Framework を使用するのが少し初めてで、Entity Framework オブジェクト型をそのオブジェクト型から派生したクラスのオブジェクトとの間でキャストするときに問題が発生しています。
コンテキストを提供するためにSurvey
、Entity Framework DB (テーブルのレコード) からオブジェクトを選択Surveys
しています。そのために、これらのエンティティ オブジェクトをアプリケーションで使用する前に実際にキャストする派生クラスを作成しました。次のようになります。
public sealed class SurveyExtended : Survey
{
public SurveyExtended() : base()
{
// non-base class members initialized here
}
}
また、LINQ を使用してこれらのオブジェクトのコレクションを設定する場合、次のようなSurveyExtended
コードを使用して型にキャストしています。
var listOfSurveyExtendedObjects = ( from record in contextFactory.SurveysDbContext.Surveys
select new SurveyExtended()
{
Name = record.Name,
Data = record.Data,
Date = record.Date
}
);
ラムダを使用して同じことを実行できることは知っていますが、概念を説明しようとしているだけです。
アプリケーションで処理した後、元のレコードに対して DML を実際に実行して実行するまでは、すべて問題ありませSurveysDbContext
ん。 UPDATE
DELETE
contextFactory.SurveysDbContext.Surveys.DeleteObject( surveyExtendedObject );
もちろんSurveyExtended
、元のSurvey
エンティティ オブジェクトではなくオブジェクトを操作しているため、これは機能しません。また、オブジェクト自体が見つからないため、ObjectStateManager
がスローされます。InvalidOperationException
それは予想されることです。
私が探しているのは、このシナリオに対する提案と代替アプローチだと思います。Survey
しようとする前にオブジェクトにキャストバックするDbContext.DeleteObject( record );
か、この問題へのアプローチを完全に変更する必要がありますか? 同様の状況で、どのような方法を使用しましたか?また、どのような利点/欠点がありますか?