0

EntityType が ViewModel の基本クラスであると定義しようとしています。Save メソッド内で、ViewModel インスタンスを EntityType にアップキャストし、DBContext に保存したいと考えています。ただし、コード行 _DbContext.Add((EntityType)vm); キャストはしません。どうすれば修正できますか?

    public class ReportDefinitionDetailsController : BaseDataController<ReportDefinitionDetail, int, ReportDefinitionDetailsViewModel>{}

    public abstract class BaseDataController<EntityType, Key, ViewModel>
        where ViewModel : EntityType, new()
        where EntityType : AuditTrail, new()
    {
        public void Save(ViewModel vm)
        {
             _DbContext.Add((EntityType)vm);
        }
    }

ここに画像の説明を入力

4

1 に答える 1

0

ここで考えられる 2 つのシナリオ:

  1. _DbContext.Add() は、AuditTrail から派生した型のパラメーターを期待していますが、具体的には AuditTrail ではありません。次のようなコンパイル エラーが発生します。'EntityType' から 'DerivedEntity' に変換できません。

  2. _DbContext.Add() は AuditTrail 参照を予期していますが、渡されたオブジェクトを機能しない方法で変換しようとしています。たとえば、AuditTrailDerivedClass1 が渡され、AuditTrailDerivedClass2 にキャストしようとします。

原則: クラス A とクラス B の両方がクラス C から派生しているからといって、A を B としてキャストできるわけではありません。

于 2013-05-29T03:36:19.090 に答える