0

私は次のモデルを持っています:

public class Address
{
   public int Id {get; set;}
   public string Street1 {get; set;}
   ...
   public int CountryId {get; set;}
   public Country Country {get; set;}
}

public class Country
{
    public int Id {get; set;}
    public string Name {get; set;}
    public string ISOCode {get; set;}
    public string Continent {get; set;}
    public string ISOCode {get; set;}
    public string Languages {get; set;}
}

public class Church
{
    public int Id {get; set;}
    public string Name {get; set;}
    public int CountryId {get; set;}
    public Country Country {get; set;}
    public int AddressId {get; set;}
    public virtual Address Address {get; set;}
    public string Phone {get; set;}
}

シリアライザーは、ChurchとAddressの両方にCountryオブジェクトがあるため、Countryと何らかの双方向の関係があると思いますか?そうでない場合、教会のオブジェクトをシリアル化しようとすると、なぜ循環参照を取得するのですか?

編集: 私にとってさらに混乱しているのは、私が質問するときに(教会の)国さえ含めていないということです:

var results = _context.Churches.Include(c => c.Address).Include(c => c.Address.Country).AsQueryable();

Entity Framework Contextは、LasyLoadingが有効にならないように構成されています。Church.Countryはnullである必要があり、ここでは問題にならないように思われます。

4

1 に答える 1

1

問題は、実際には DataContext への参照を持つプロキシである EF エンティティをシリアル化しているという事実にあると思います。デバッガーでそれらを検査します。

属性を使用しJsonObject(MemberSerialization.OptIn)、プロパティを属性でマークする必要がありJsonPropertyます。ドキュメントの詳細情報。

于 2012-11-08T08:43:03.747 に答える