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

我可以在这里想到两种可能的情况:

  1. _DbContext.Add() 需要一个派生自 AuditTrail 类型的参数,但不是专门从 AuditTrail 派生的。您将收到如下编译错误:无法从“EntityType”转换为“DerivedEntity”。

  2. _DbContext.Add() 期待一个 AuditTrail 引用,但随后尝试以一种不起作用的方式转换传递的对象。例如,它通过 AuditTrailDerivedClass1 并尝试强制转换为 AuditTrailDerivedClass2。

原理:仅仅因为A类和B类都派生自C类,并不意味着A可以转换为B。

于 2013-05-29T03:36:19.090 回答