我有一些继承链,它从接口和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
也编译没有任何问题。
答案 0 :(得分:1)
这不起作用,因为DbSet<Item>
不是从DbSet<BaseItem>
继承的,而且它在逻辑上是相当不同的,因为DbSet<>
是一个可变的结构。您可以将BaseItem
添加到DbSet<BaseItem>
但是当然您无法将其添加到DbSet<Item>
,因此这不起作用。出于同样的原因,您无法转换列表或其他可变结构。
但是,对于IEnumerable
或IReadOnlyCollection
等不可变结构,此转换可以正常工作。