将EntitySet实现为IList
本文关键字:IList 实现 EntitySet | 更新日期: 2023-09-27 18:02:37
我在玩LinqToSql,我试图为我的一个类实现存储库模式。问题来了,当我试图映射属性是EntitySet到IList我得到一个错误
TheCore.Models。User'没有实现接口成员' core . models . iuserrepository . vehicles '。"TheCore.Models.User。车辆不能实现core . models . iuserrepository。因为它没有匹配的返回类型System.Collections.Generic.IList
EntitySet似乎实现了IList,所以为什么我不能映射IList属性到EntitySet属性?
EntitySet:
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="Users_Vehicles", Storage="_Vehicles", ThisKey="Id", OtherKey="FkOwnerId")]
public EntitySet<Vehicle> Vehicles
{
get
{
return this._Vehicles;
}
set
{
this._Vehicles.Assign(value);
}
}
存储库接口:
IList<Vehicle> Vehicles { get; set; }
接口实现的返回类型必须与接口中声明的返回类型匹配。这被称为返回类型协方差,c#不支持。
所以即使List
实现了IList
public interface IFoo
{
IList<string> Foos {get; set;}
}
public class Foo : IFoo
{
public List<string> Foos {get; set;}
}
看看这个问题:"Interface not implemented"当返回派生类型
我可能不理解你的问题,但似乎你有一个方法IList<Vehicle> Vehicles { get; set; }
的接口,并试图通过提供实现public EntitySet<Vehicle> Vehicles
来履行合同。这是不允许的——实现必须提供与接口相同的返回类型(在本例中为IList<Vehicle>
)。如果可以,更改存储库实现以包装EntitySet,然后将方法与所需的接口匹配:
public class Vehicle
{
}
public interface IRepository
{
IList<Vehicle> Vehicles { get; set; }
}
public class Repository : IRepository
{
private EntitySet<Vehicle> _Vehicles;
public IList<Vehicle> Vehicles
{
get
{
return this._Vehicles;
}
set
{
this._Vehicles.Assign(value);
}
}
}