2016-07-04 93 views
1

我有一些继承链从接口开始,最终实际implmenetation结束了几个步骤。EF核心:参数类型不能分配给参数

然而,这个代码是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

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

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

相关问题