Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 以实现接口的类为例_C#_Entity Framework_Inheritance - Fatal编程技术网

C# 以实现接口的类为例

C# 以实现接口的类为例,c#,entity-framework,inheritance,C#,Entity Framework,Inheritance,我有一个抽象的基本模型类,它包含一些共享属性。除此之外,我还有一些次要的接口,这些接口定义了模型可用于哪些流程 下面是基类、接口和派生类的示例: public abstract class ModelBase { public ModelBase(string name) { Name = name; } public int Id { get; private set; } public int Name { get; privat

我有一个抽象的基本模型类,它包含一些共享属性。除此之外,我还有一些次要的接口,这些接口定义了模型可用于哪些流程

下面是基类、接口和派生类的示例:

public abstract class ModelBase
{
    public ModelBase(string name) 
    {
        Name = name;
    }

    public int Id { get; private set; }

    public int Name { get; private set; }
}


public interface ISupportProcessA
{
    public decimal Amount { get; }
}


public class ModelDerived : ModelBase
{
    public ModelDerived(string name) : base(name) { }

    public decimal Amount { get; private set; }
}
为了使用基本模型执行一些工作,我还有一个抽象的基本处理器类,其中包含一些共享功能和一些派生的处理器类,每个进程一个。它可能是这样的:

public abstract class ProcessorBase
{
    private readonly ModelBase model;

    public ProcessorBase(ModelBase model)
    {
        this.model = model;
    }

    // ...some shared methods
 }


 public class ProcessorA : ProcessorBase 
 {
     private readonly ISupportProcessA model;

     public ProcessorA(ISupportProcessA model) : base(model)
     {
         this.model = model;
     }

     // ...some specific methods
 }
现在问题就在这里。因为
ISupportProcessA
ModelBase
无关,因此不能作为
base()
中的输入。这是有道理的

因此,我试图创建一个接口
IModelBase
,而不是
ModelBase
。然而,一旦我连接到实体框架,就会出现一些问题,因为实体框架不能很好地处理接口(或者可能只是我?)

所以我的问题是:


是否需要请求一个既从
ModelBase
派生又实现
ISupportProcessA
的类?

您可以通过泛型获得一些方法:

public class ProcessorA<TModel> : ProcessorBase where TModel : ModelBase, ISupportProcessA
{
    private readonly ISupportProcessA model;

    public ProcessorA(TModel model) : base(model)
    {
        this.model = model;
    }

    // ...some specific methods
}

这意味着您可以执行
ProcessorA processor=ProcessorA.Create(new Model())
,但要花费更多的样板文件。

您可以通过泛型获得一些方法:

public class ProcessorA<TModel> : ProcessorBase where TModel : ModelBase, ISupportProcessA
{
    private readonly ISupportProcessA model;

    public ProcessorA(TModel model) : base(model)
    {
        this.model = model;
    }

    // ...some specific methods
}

这意味着您可以执行
ProcessorA processor=ProcessorA.Create(new Model())
,但要花费更多的样板文件。

谢谢,我认为其中可能有一些要点是可行的。实际的实现(不幸的是)比我的简化示例-)要复杂一些。谢谢,我认为其中可能有一些要点是可行的。不幸的是,实际实现比我的简化示例-)要复杂一些。