В случае, если это кому-нибудь поможет, я решил документировать, как мы решили эту же ошибку для наших целей при использовании Entity Framework 4.3.1 и JSON.Net 4.5.3.
Мы используем подход Database First DbContext.Для наших нужд мы могли бы разрешить это, используя атрибут [JsonIgnore]
.Хитрость заключается в том, что поскольку изменения в автоматически сгенерированных классах сущностей перезаписываются при обновлении из базы данных, с помощью Database First вы можете добавлять атрибуты, используя подход «класс метаданных друзей», приведенный в в этом сообщении StackOverflow .
Ниже приведен фрагмент кода.У нас был объект «Запрос» (class Query
), который имел отношения к объектам «Компания» и «Пользователь».В новом файле класса мы объявляем частичный класс с атрибутом [MetadataType]
, а затем в указанном классе QueryMetadata
мы аннотируем членов, которые хотим игнорировать, а именно членов public virtual
, к которым EF4.x добавляетвыразить отношения (иначе известные свойства навигации).
Сущность Query
также имеет поля внешнего ключа (в нашем случае FK_User
и FK_Company
).Этим полям не требуется атрибут [JsonIgnore]
- их можно сериализовать с использованием значений их внешних ключей.
[MetadataType(typeof(QueryMetadata))]
public partial class Query
{
}
public class QueryMetadata
{
[JsonIgnore]
public virtual Company company { get; set; }
[JsonIgnore]
public virtual User user { get; set; }
}
Однако, если бы нам действительно пришлось также сериализовать связанные объекты Company или User, мы бы нажаликирпичная стена!Подход, предложенный Джоном Бубриски здесь , не будет работать для нас, поскольку мы хотим полагаться на отслеживание изменений Entity Framework.