EF Core:参数类型不能分配给参数

时间:2016-07-04 11:08:22

标签: c# .net entity-framework entity-framework-core

我有一些继承链,它从接口和endup开始,实际的implmenetation进行了几个步骤。

但是,此代码100%正确

IBaseModel model = new ErrorModel();

但是当我尝试这样的事情时:

class MyContext: DbContext{
    public DbSet<ErrorModel> Errors {get; set}
}

以后

DbSet<IBaseModel> set = new MyContext().Errors

这不起作用(未编译)并说参数类型DbSet<ErrorModel>不能分配给参数DbSet<IBaseModel>

那里有什么问题以及如何解决它?

UPD1:如果我使用的是基类而不是接口,它也无法正常工作。像这样的代码

IQueryable<IBaseModel> tests = new MyContext().Errors 

也编译没有任何问题。

1 个答案:

答案 0 :(得分:1)

这不起作用,因为DbSet<Item>不是从DbSet<BaseItem>继承的,而且它在逻辑上是相当不同的,因为DbSet<>是一个可变的结构。您可以将BaseItem添加到DbSet<BaseItem>但是当然您无法将其添加到DbSet<Item>,因此这不起作用。出于同样的原因,您无法转换列表或其他可变结构。

但是,对于IEnumerableIReadOnlyCollection等不可变结构,此转换可以正常工作。