EF Core:參數類型不能分配給參數

.net c# 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

這不起作用(未編譯)並說Argument Type DbSet<ErrorModel>不能賦值給參數DbSet<IBaseModel>

有什麼問題以及如何解決它?


UPD1:如果我使用基類而不是接口,它也無法工作。和這樣的代碼

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

也編譯沒有任何問題。

一般承認的答案

這不起作用,因為DbSet<Item>不是從DbSet<BaseItem>繼承而且它在邏輯上是相當不同的東西,因為DbSet<>是一個可變結構。你可以將BaseItem添加到DbSet<BaseItem>但是當然你不能將它添加到DbSet<Item>所以這不起作用。出於同樣的原因,您無法轉換列表或其他可變結構。

但是,對於像IEnumerableIReadOnlyCollection這樣的不可變結構,這種轉換可以正常工作。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因