WCF-REST和POCO無窮迴圈的問題
這陣子在寫REST配合上EF4和POCO
Lazy Loading的不支援這已經不用講了....
同樣的Proxy也一樣必須關掉,
但還是碰上一個問題,
明明在除錯模式看的時候,物件裡面的值也都有,是正常的,
但實際上,打開的網頁就是一片空白。
後來終於找到相關網站如下
http://nikhilthaker86.wordpress.com/tag/wcf-rest/
翻譯後大約的意思是( 翻錯了不要打我- -)
因為在呼叫的時候,會變成Customer 取得 Orders,
然後Orders裡面又取得Customer 然後,Customer又取得Orders
變成無窮迴圈取得,使得序列化沒辦法產生出來。
目前找到的方法是使用
[IgnoreDataMember]
這個參數是將此屬性不要序列化,
但同樣也有些問題,如果將Customer的Orders屬性關掉的話,
就變成,可以從Orders取得Customer屬性,但卻無法從Customer取得Orders
P.S 解決著個問題,大概一口氣看了我這輩子最多的英文文章吧= =
[IgnoreDataMember]
public virtual ICollection<Orders> Orders
{
get
{
if (_orders == null)
{
var newCollection = new FixupCollection<Orders>();
newCollection.CollectionChanged += FixupOrders;
_orders = newCollection;
}
return _orders;
}
set
{
if (!ReferenceEquals(_orders, value))
{
var previousValue = _orders as FixupCollection<Orders>;
if (previousValue != null)
{
previousValue.CollectionChanged -= FixupOrders;
}
_orders = value;
var newValue = value as FixupCollection<Orders>;
if (newValue != null)
{
newValue.CollectionChanged += FixupOrders;
}
}
}
}
private ICollection<Orders> _orders;