EFコア:引数型をパラメータに代入できません

.net c# entity-framework entity-framework-core

質問

私はいくつかの継承チェーンを持っています。これはインターフェイスから始まり、実際の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 

また問題なくコンパイルされます。

受け入れられた回答

DbSet<Item>DbSet<BaseItem>から継承されていないため、 DbSet<>は可変構造であるため、これは機能しません。 BaseItemDbSet<BaseItem>追加することはできますが、 DbSet<Item>追加することはできませんので、これは機能しません。同じ理由でリストや他の変更可能な構造体を変換することはできません。

しかし、 IEnumerableIReadOnlyCollectionような不変構造の場合、この変換はうまく動作します。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ