无法将位置转换为 ILocation
Unable to cast location to 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 ICollection<IOrganizationLocation> Locations
{
get
{
return (ICollection<IOrganizationLocation>) Location;
}
}
}
public interface IOrganization
{
string Alias { get; }
ICollection<IOrganizationLocation> Locations { get; }
}
现在,当我尝试通过服务(后端数据层是 EF6)运行 时,"Location" 变量具有所有值,但是,"Locations" 变量无法投掷。如果我尝试进行安全转换,每次都会返回 null。
我不明白为什么转换会失败?它具有相同的字段,都是 ICollection 类型,那么为什么我得到一个 HashSet?
我这样做的原因是因为 EF6 框架能够将此 class 视为 table 它需要具有具体类型和 public get/set。但是,我不想公开它,所以我改用接口,然后在调用接口时注入 class 。这样我只公开了get方法,在它之上我只公开了接口层。
Unable to cast object of type 'System.Collections.Generic.HashSet`1[Namespace.OrganizationLocation]' to type 'System.Collections.Generic.ICollection`1[Namespace2.IOrganizationLocation]'.
我可以通过将代码更改为以下内容来解决此问题:
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; }
}
我遇到了一个相当奇怪的转换错误。这是代码:
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。
我不明白为什么转换会失败?它具有相同的字段,都是 ICollection 类型,那么为什么我得到一个 HashSet?
我这样做的原因是因为 EF6 框架能够将此 class 视为 table 它需要具有具体类型和 public get/set。但是,我不想公开它,所以我改用接口,然后在调用接口时注入 class 。这样我只公开了get方法,在它之上我只公开了接口层。
Unable to cast object of type 'System.Collections.Generic.HashSet`1[Namespace.OrganizationLocation]' to type 'System.Collections.Generic.ICollection`1[Namespace2.IOrganizationLocation]'.
我可以通过将代码更改为以下内容来解决此问题:
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; }
}