SORU
18 Mayıs 2011, ÇARŞAMBA


EF: Doğrulama tembel yüklü, gerekli özellikleri kullanırken güncelleme başarısız

Bu son derece kolay bir model verilir

public class MyContext : BaseContext
{
    public DbSet<Foo> Foos { get; set; }
    public DbSet<Bar> Bars { get; set; }
}

public class Foo
{
    public int Id { get; set; }
    public int Data { get; set; }
    [Required]
    public virtual Bar Bar { get; set; }
}

public class Bar
{
    public int Id { get; set; }
}

Aşağıdaki program başarısız:

object id;
using (var context = new MyContext())
{
    var foo = new Foo { Bar = new Bar() };
    context.Foos.Add(foo);
    context.SaveChanges();
    id = foo.Id;
}
using (var context = new MyContext())
{
    var foo = context.Foos.Find(id);
    foo.Data = 2;
    context.SaveChanges(); //Crash here
}

DbEntityValidationException ile. Mesajı EntityValidationErrors bulunurBar alanı gereklidir..

Eğer SaveChanges önce aşağıdaki satırı ekleyerek Bar mal yükleme zorluyorum ancak:

var bar = foo.Bar;

Her şey gayet iyi çalışıyor. Bu da Ben [Required] özniteliğini kaldırmak çalışır.

Bu gerçekten beklenen bir davranış mı? Orada herhangi bir geçici çözüm (her gerekli başvuru her zaman yükleme dışında bir varlık güncellemek istiyorum)

CEVAP
18 Mayıs 2011, ÇARŞAMBA


Aynı sorunun bir cevabı vardı following post buldum:

Bu sorunun nedeni bu. RC ve RTM doğrulama artık tembel yükler herhangi bir özellikleri. Nedeni bu değişiklik kaydederken olmasıdır yapıldı bu kez de varlıkları bir sürü tembel yüklenen özellikleri doğrulama onları bir potansiyel birer alacağı beklenmedik bir sürü neden hareketleri ve sarsılan performans.

Çözüm açıkça yüklenemedi. kaydetmeden önce tüm doğrulanmış özellikleri veya kullanarak doğrulama .() Vardır, burada nasıl yapılacağı hakkında daha fazla bilgi edinin: http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

Benim çok berbat bir proxy uygulamasıdır bu. Süre unnecesarily yürüyen nesne grafiği ve retriveing tembel yüklenen özellikler doğal olarak bir şey olmaya bilir (ama görünüşe göre göz ardı Microsoft'un ilk enkarnasyon EF), yapmamalısın olması lazım BM-proxy sarıcı için doğrulamak var. Kararımı değiştirdim, ORM değişikliği izci doğrulama gerektirir bilir doğrusu neyse nesne grafiği yürümek, gitmek gerekir neden emin değilim.

Sorun var neden emin değilim, ama eğer ki Arabiriminin kullanarak olsaydım bu sorunu yaşıyor olmazdım eminim.

Benim 'çözüm' - Ne yaptım EntityTypeConfiguration bir sınıfta ilişkinin Gerekli doğasını tanımlamak, ve Gerekli özniteliği kaldırılır. Bu iyi çalışması gerekir. İlişkiyi doğrulamak değil, ama güncelleme başarısız anlamına gelir. Değil ideal bir sonuç.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012
  • majesticdubstep

    majesticdubs

    3 Kasım 2011