【发布时间】:2016-03-31 12:47:16
【问题描述】:
经过大量挖掘和混淆错误消息后,我得到了这个示例(我相信这是重现该问题的最小示例)。我几乎可以肯定地得出结论,问题的出现是由于与我要返回的实体相关联。
[OperationContract]
[WebGet(UriTemplate = "Stations")]
List<Station> GetStations();
public List<Station> GetStations()
{
List<Station> stations = new List<Station>();
using (Context context = new Context())
foreach (Station station in context.Stations.Include(element => element.Records))
//stations.Add(station.Copy());
stations.Add(station);
return stations;
}
如果我用 Copy() 激活该行(它会创建一个新的站实例并复制除它自己创建的记录之外的所有属性),它就会起作用。但是,当我只添加电台而不创建副本时(无论我是保留记录、将它们无效还是设置为空列表),它都不能很好地滚动。
自从我使用了Include(),被处理的对象就不再是问题了。我在控制台中收到的错误消息是这样的。
http://localhost:25760/MyService.svc/Stationsnet::ERR_CONNECTION_RESET
谷歌搜索给了我很多关于 Apache(我在 IIS 上运行它)、PHP(我在 .NET 上构建它)和证书安全问题(我没有使用任何其他调用)的引用工作得很好)。
所以我怀疑错误消息是来自混乱的计算机,或者是我在设置中遗漏了一些东西。自动生成的类反映了我添加到表中的外键,如下所示。
alter table Records
add constraint FkStationId
foreign key (StationId)
references Stations (Id)
public partial class Record
{
public System.Guid Id { get; set; }
public Nullable<System.Guid> StationId { get; set; }
...
public virtual Station Station { get; set; }
}
public partial class Station
{
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Station() { this.Records = new HashSet<Record>(); }
public System.Guid Id { get; set; }
...
[System.Diagnostics.CodeAnalysis.SuppressMessage(
"Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Record> Records { get; set; }
}
我没有看到任何东西让我想到如何解决它。这个错误不应该发生。另一方面——福岛也不应该发生。但确实如此。
【问题讨论】:
标签: c# entity-framework iis include