我有以下问题。我有一个接口IUserGroup
和一个实体框架UserGroupEF
的实现。代码是(抱歉,变量主要是波兰语):
public partial class UzytkownikGrupaEF : IUzytkownikGrupa
{
//something
}
public partial class GrupaEF
{
private ICollection<UzytkownikGrupaEF> _Uzytkownicy;
public virtual ICollection<UzytkownikGrupaEF> UzytkownicyEF
{
get { return _Uzytkownicy; }
}
/*
...
*/
[NotMapped]
public ICollection<IUzytkownikGrupa> Uzytkownicy //so in application i dont have to use EF types - just interfaces
{
get { return (ICollection<IUzytkownikGrupa>)this.UzytkownicyEF; } //Here is problem - i cant cast Collection<UzytkownikGrupaEF> to ICollection<IUzytkownikGrupa>
}
}
所以你可以看到我希望能够从Collection<UserGroupEF>
到ICollection<IUserGroup>
做一个漂亮而干净的演员,而不需要做奇怪的循环和复制数据。
答案 0 :(得分:2)
首先,Eric Lippert关于C#Why can I not assign a List of concrete types to a List of that concrete's interface?中的共同/控制方差的解释 因此,要使其工作,您需要将属性类型更改为IEnumerable,因为IEnumerable是协变的(在C#4中)而ICollection不是。
[NotMapped]
public IEnumerable<IUzytkownikGrupa> Uzytkownicy {
get { return this.UzytkownicyEF; }
}
其次,您可以Enumerable.Cast方法转换您的收藏。