我正在使用WCF REST服務(GET方法)檢索我的EF4 POCO。該服務似乎工作得很好。當我在瀏覽器中查詢uri時,我得到了預期的結果。使用WCF REST服務入門套件檢索EF4 POCO
在我的客戶端應用程序,我試圖用WCF REST Starter Kit's HTTPExtension方法 - ReadAsDataContract()將結果轉換回我的POCO。當POCO的導航屬性是相關POCO的單個對象時,這可以正常工作。問題在於導航屬性是相關POCO的集合。 ReadAsDataContract()方法拋出異常,並顯示消息「對象引用未設置爲對象的實例」。
以下是我的POCO。
[DataContract(Namespace = "", Name = "Trip")]
public class Trip
{
[DataMember(Order = 1)]
public virtual int TripID { get; set; }
[DataMember(Order = 2)]
public virtual int RegionID { get; set; }
[DataMember(Order = 3)]
public virtual System.DateTime BookingDate { get; set; }
[DataMember(Order = 4)]
public virtual Region Region { // removed for brevity
}
}
[DataContract(Namespace = "", Name = "Region")]
public class Region
{
[DataMember(Order = 1)]
public virtual int RegionID { get; set; }
[DataMember(Order = 2)]
public virtual string RegionCode { get; set; }
[DataMember(Order = 3)]
public virtual FixupCollection<Trip> Trips { // removed for brevity
}
}
[CollectionDataContract(Namespace = "", Name = "{0}s", ItemName = "{0}")]
[Serializable]
public class FixupCollection<T> : ObservableCollection<T>
{
protected override void ClearItems()
{
new List<T>(this).ForEach(t => Remove(t));
}
protected override void InsertItem(int index, T item)
{
if (!this.Contains(item))
{
base.InsertItem(index, item);
}
}
}
而且這是我正在嘗試檢索地區 POCO。
static void GetRegion()
{
string uri = "http://localhost:8080/TripService/Regions?id=1";
HttpClient client = new HttpClient(uri);
using (HttpResponseMessage response = client.Get(uri))
{
Region region;
response.EnsureStatusIsSuccessful();
try
{
region = response.Content.ReadAsDataContract<Region>(); // this line throws exception because Region returns a collection of related trips
Console.WriteLine(region.RegionName);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
希望任何指針。
顯示您的POCO類的代碼。還要檢查收集是否包含在響應中(使用Fiddler)並描述如何檢索對象和加載的集合(您是使用動態代理,延遲加載等?)。 – 2011-03-02 10:27:27
@Ladislav Mrnka:我編輯了我的問題,添加了我正在使用的代碼。 – muruge 2011-03-02 15:28:50
@Greg Sansom:感謝您分享該鏈接。 – muruge 2011-03-02 15:29:45