Таким образом, отношения между родителями и детьми исчезнут, как исключение

постВот это спрашивает, как решить ошибку циклической ссылки при возврате сериализованного объекта через EF4 CTP5. Я столкнулся с той же самой проблемой с проектом веб-форм WCF некоторое время назад.

Мне удалось «решить» эту проблему в моем проекте WCF / веб-форм и в моем проекте MVC3. Я не думаю, что это имеет значение, какой тип проекта, поскольку это, кажется, "вещь" сериализации EF.

Я решил проблему, отключив ProxyCreation в моем конструкторе ObjectContext следующим образом:

public class MyObjectContext : DbContext, IDbContext
{
     public MyObjectContext(string connectionStringName) : base(connectionStringName)
     {
        ((IObjectContextAdapter)this).ObjectContext.ContextOptions.ProxyCreationEnabled = false;
     }
     public DbSet<Product> Products {get;set;}
     //etc.
} 

Мой вопрос: может ли кто-нибудь объяснить, почему это, казалось бы, решило проблему?

Я думаю, что проблема связана с навигационными свойствами в моем POCO, но после этого я в тупике. Благодарю.

 trevorc21 янв. 2011 г., 02:33
Вы не можете притворяться, что знаете, о чем говорите в этом месте. Лучше быть честным. Спасибо за +1.
 Ben Blank21 янв. 2011 г., 02:00
+1 только потому, что твой титул заставил меня улыбнуться! :-)

Ответы на вопрос(1)

Решение Вопроса

вы также отключите отложенную загрузку. Когда происходит сериализация объекта, он посещает все свойства навигации. Если отложенная загрузка включена, он загружает все связанные объекты и пытается их также сериализовать. Снова он посещает все их свойства, включая свойства навигации, указывающие на родительский объект. На этом этапе вы должны сказать сериализации, что это свойство является циклической ссылкой, или оно будет сериализовать объект снова и продолжится в бесконечном цикле.

Хитрость здесь может заключаться в том, чтобы аннотировать ваше свойство круговой навигации в дочернем объекте с помощьюScriptIgnore приписывать.

 hazimdikenli29 янв. 2011 г., 16:51
ScriptIgnore не работает, он может работать, если жестко отключить создание прокси.
 trevorc21 янв. 2011 г., 23:58
Это имеет смысл. Я полагал, что это должно было включать ленивую загрузку, но я не понимал, что создание прокси отключило ленивую загрузку. Отличный ответ! Благодарю.

Ваш ответ на вопрос