无法将位置转换为ILocation

本文关键字:ILocation 转换 位置 | 更新日期: 2023-09-27 18:15:47

我得到一个相当奇怪的铸造错误。下面是代码:

public class OrganizationLocation : IOrganizationLocation
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}
public interface IOrganizationLocation
{
    string Name { get; }
}
public class Organization : IOrganization
{
    public Guid Id { get; set; }
    public string Alias { get; set; }
    public virtual ICollection<OrganizationLocation> Location { get; set; }
    public ICollection<IOrganizationLocation> Locations
    {
        get
        {
            return (ICollection<IOrganizationLocation>) Location;
        }
    }
}
public interface IOrganization
{
    string Alias { get; }
    ICollection<IOrganizationLocation> Locations { get; }
}

现在当我尝试通过服务(后端数据层是EF6)运行这个时,"Location"变量具有所有值,但是,"Locations"变量无法强制转换。如果我尝试进行安全强制转换,它每次都会返回null。

我不明白为什么演员会失败?它有相同的字段,都是icollectiontype,所以为什么我得到一个HashSet?

我这样做的原因是因为EF6框架能够将该类视为表,它需要具有具体类型和公共get/set。但是,我不希望公开它,所以我使用interface,然后在调用接口时注入类。这样,我只暴露get方法,在它的顶部,我只暴露接口层。

无法强制转换类型为'System.Collections.Generic.HashSet ' 1的对象。到"System.Collections.Generic.ICollection"1[Namespace2.IOrganizationLocation]'.

无法将位置转换为ILocation

我能够通过将代码更改为以下内容来解决这个问题:

public class OrganizationLocation : IOrganizationLocation
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}
public interface IOrganizationLocation
{
    string Name { get; }
}
public class Organization : IOrganization
{
    public Guid Id { get; set; }
    public string Alias { get; set; }
    public virtual ICollection<OrganizationLocation> Location { get; set; }
    public IEnumerable<IOrganizationLocation> Locations => Location
}
public interface IOrganization
{
    string Alias { get; }
    IEnumerable<IOrganizationLocation> Locations { get; }
}