SORU
7 NİSAN 2011, PERŞEMBE


EF 4.1 - İlk - JSON Dairesel Referans Kodu Seri hale getirme Hatası

Bildiğim kadarıyla herhangi bir döngüsel başvuru var, ancak Dairesel Referans Seri bir Hata alıyorum. Veritabanından bir dizi Emir almak ve JSON olarak istemci için onları gönderiyorum. Tüm kod aşağıda gösterilmiştir.

Bu hata:

Hata

Döngüsel bir başvuru algılandı türünde bir nesne seri hale getirilirken 'System.Data.Entity.DynamicProxies.'.Order_83CECF2AA4DE38232F9077D4B26941ab96bc61230419ea8ac42c9100e6072812 Açıklama: işlenmeyen Bir özel durum bu yürütme sırasında bir hata oluştu geçerli web isteği. Lütfen Gözden geçir stack hakkında daha fazla bilgi için izleme başlatıldığı hata ve kod.

Özel Durum Ayrıntıları: Sistem.Invalidoperationexception: döngüsel başvuru yaparken tespit edildi seri türde bir nesne 'System.Data.Entity.DynamicProxies.'. Order_83CECF2AA4DE38232F9077D4B26941ab96bc61230419ea8ac42c9100e6072812

Kaynak Hatası:

İşlenmeyen bir özel durum oluşturuldu mevcut yürütülürken web isteği. İlgili bilgiler özel kökeni ve konumu belirlenebilir dışında kullanarak aşağıdaki yığın izleme.

Benim sınıfları aşağıdaki gibidir:

Sipariş

public class Order
{
    [Key]
    public int OrderId { get; set; }

    public int PatientId { get; set; }
    public virtual Patient Patient { get; set; }

    public int CertificationPeriodId { get; set; }
    public virtual CertificationPeriod CertificationPeriod { get; set; }

    public int AgencyId { get; set; }
    public virtual Agency Agency { get; set; }

    public int PrimaryDiagnosisId { get; set; }
    public virtual Diagnosis PrimaryDiagnosis { get; set; }

    public int ApprovalStatusId { get; set; }
    public virtual OrderApprovalStatus ApprovalStatus { get; set; }

    public int ApproverId { get; set; }
    public virtual User Approver { get; set; }

    public int SubmitterId { get; set; }
    public virtual User Submitter { get; set; }

    public DateTime ApprovalDate { get; set; }

    public DateTime SubmittedDate { get; set; }
    public Boolean IsDeprecated { get; set; }
}

Hasta

public class Patient
{
    [Key]
    public int PatientId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string MiddleInitial { get; set; }
    public bool IsMale;
    public DateTime DateOfBirth { get; set; }

    public int PatientAddressId { get; set; }
    public Address PatientAddress { get; set; }

    public bool IsDeprecated { get; set; }
}

Sertifika Dönemi

public class CertificationPeriod
{
    [Key]
    public int CertificationPeriodId { get; set; }
    public DateTime startDate { get; set; }
    public DateTime endDate { get; set; }
    public bool isDeprecated { get; set; }
}

Ajans

public class Agency
{
    [Key]
    public int AgencyId { get; set; }
    public string Name { get; set; }

    public int PatientAddressId { get; set; }
    public virtual Address Address { get; set; }
}

Tanı

public class Diagnosis
{
    [Key]
    public int DiagnosisId { get; set; }
    public string Icd9Code { get; set; }
    public string Description { get; set; }
    public DateTime DateOfDiagnosis { get; set; }
    public string Onset { get; set; }
    public string Details { get; set; }
}

OrderApprovalStatus

public class OrderApprovalStatus
{
    [Key]
    public int OrderApprovalStatusId { get; set; }
    public string Status { get; set; }
}

Kullanıcı

public class User
{
    [Key]
    public int UserId { get; set; }
    public string Login { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string NPI { get; set; }
    public string Email { get; set; }

}

NOT: DÜZENLEME SIRASINDA . SINIF YENİ EK ADRESİ

Adres

public class Address
{
    [Key]
    public int AddressId { get; set; }
    public string StreetAddress { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
    public string Phone { get; set; }
    public string Title { get; set; }
    public string Label { get; set; }
}

Serileştirme yürüten kod burada:

OrderController alıntı

    public ActionResult GetAll()
    {
        return Json(ppEFContext.Orders, JsonRequestBehavior.AllowGet);
    }

Teşekkürler

CEVAP
7 NİSAN 2011, PERŞEMBE


Tüm navigasyon özellikleri virtual anahtar tembel yükleme ve proxy oluşturmayı devre dışı bırakmak ve istekli yüklemek yerine gerekli nesne grafiği explicitely yüklemek için kullanın kaldırmak için deneyebilirsiniz:

public ActionResult GetAll()
{
    return Json(ppEFContext.Orders
                           .Include(o => o.Patient)
                           .Include(o => o.Patient.PatientAddress)
                           .Include(o => o.CertificationPeriod)
                           .Include(o => o.Agency)
                           .Include(o => o.Agency.Address)
                           .Include(o => o.PrimaryDiagnosis)
                           .Include(o => o.ApprovalStatus)
                           .Include(o => o.Approver)
                           .Include(o => o.Submitter),
        JsonRequestBehavior.AllowGet);
}

** 25 uygulama gibi görünüyor atıfta nesne grafiği tembel yük var sanal özelliklerini, muhtemelen şimdi de seri hale getirme sorunu yaratan sen tanıştırdın çünkü tembel yükleme zaten güvenmek değil.

Edit

Gerekli navigasyon özellikleri virtual anahtar tembel yükleme modeli için tamamen imkansız kılacak bir şekilde kaldırmak için değil. Yeterince yakınlık, seri hale getirme gibi rahatsız edici olduğu özel durumlar için proxy oluşturma gibi tembel yükleme devre dışı) devre dışı bırakmak için:

ppEFContext.Configuration.ProxyCreationEnabled = false;

Bu özel bağlam örneği ppEFContext sadece proxy oluşturma devre dışı bırakır.

(Sadece, @WillC zaten burada bahsedilen gördüm. Upvote için bu cevabı Düzenle lütfen.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • humanHardDrive

    humanHardDri

    16 Mart 2011
  • LIVESTRONG.COM

    LIVESTRONG.C

    5 EKİM 2005
  • MrOctopi

    MrOctopi

    6 Aralık 2010