Kendi kendine izleme varlıkları

Önemli

Kendini izleyen varlıklar şablonunu kullanmanızı artık önermiyoruz. Yalnızca mevcut uygulamaları desteklemek için sunulmaya devam edecektir. Uygulamanız bağlantısız varlık graflarıyla çalışmayı gerektiriyorsa, topluluk tarafından daha etkin bir şekilde geliştirilen Kendini İzleyen Varlıklara benzer bir teknoloji olan İzlenebilir Varlıklar veya düşük düzeyli değişiklik izleme API’lerini kullanarak özel kod yazma gibi diğer alternatifleri göz önünde bulundurun.

Entity Framework tabanlı bir uygulamada bağlam, nesnelerinizdeki değişiklikleri izlemekten sorumludur. Ardından, değişiklikleri veritabanında kalıcı hale getirmek için SaveChanges yöntemini kullanmanız gerekir. N Katmanı uygulamalarıyla çalışırken, genellikle varlık nesnelerinin bağlamla olan bağlantısı kesilir ve değişiklikleri nasıl izleyeceğinizi ve bu değişiklikleri bağlama nasıl geri bildireceğinizi belirlemeniz gerekir. Kendini İzleyen Varlıklar (STE) herhangi bir katmandaki değişiklikleri izlemenize ve ardından bu değişiklikleri kaydedilecek bir bağlamda yeniden yürütmenize yardımcı olabilir.

Kendini izleyen varlıkları yalnızca nesne grafında değişikliklerin yapıldığı katmanda bağlam kullanılamıyorsa kullanın. Bağlam kullanılabiliyorsa değişiklikleri izlemeyle ilgileneceğinden kendini izleyen varlıkları kullanmanız gerekmez.

Bu şablon öğesi iki .tt (metin şablonu) dosyası oluşturur:

  • <model adı.tt> dosyası, varlık türlerini ve kendini izleyen varlıklar tarafından kullanılan değişiklik izleme mantığını ve kendini izleyen varlıklarda durum ayarlamaya izin veren uzantı yöntemlerini içeren bir yardımcı sınıfı oluşturur.
  • <model adı>.Context.tt dosyası, türetilmiş bir bağlam ve ObjectContext ve ObjectSet sınıfları için ApplyChanges yöntemlerini içeren bir uzantı oluşturur. Bu yöntemler, veritabanındaki değişiklikleri kaydetmek için gerçekleştirilmesi gereken işlem kümesi çıkarımını yapmak için kendini izleyen varlıkların grafında yer alan değişiklik izleme bilgilerini inceler.

Başlayın

Başlamak için Kendini İzleyen Varlıklar Kılavuzu sayfasını ziyaret edin.

Kendini İzleyen Varlıklarla Çalışırken Dikkat Edilmesi Gereken İşlevler

Önemli

Kendini izleyen varlıklar şablonunu kullanmanızı artık önermiyoruz. Yalnızca mevcut uygulamaları desteklemek için sunulmaya devam edecektir. Uygulamanız bağlantısız varlık graflarıyla çalışmayı gerektiriyorsa, topluluk tarafından daha etkin bir şekilde geliştirilen Kendini İzleyen Varlıklara benzer bir teknoloji olan İzlenebilir Varlıklar veya düşük düzeyli değişiklik izleme API’lerini kullanarak özel kod yazma gibi diğer alternatifleri göz önünde bulundurun.

Kendini izleyen varlıklarıyla çalışırken aşağıdakileri göz önünde bulundurun:

  • İstemci projenizin varlık türlerini içeren derlemeye başvurduğundan emin olun. İstemci projesine yalnızca hizmet başvurusu eklerseniz, istemci projesi gerçek kendini izleyen varlık türlerini değil WCF ara sunucu türlerini kullanır. Bu, istemcideki varlıkların izlenmesini yöneten otomatik bildirim özelliklerini almayacağınız anlamına gelir. Varlık türlerini kasıtlı olarak eklemek istemiyorsanız, değişikliklerin hizmete geri gönderilmesi için istemcide değişiklik izleme bilgilerini el ile ayarlamanız gerekir.

  • Hizmet işlemine yapılan çağrılar durum bilgisiz olmalı ve nesne bağlamının yeni bir örneğini oluşturmalıdır. Ayrıca bir using bloğunda nesne bağlamı oluşturmanızı öneririz.

  • İstemcide değiştirilmiş olan grafa hizmete gönderdiğinizde ve ardından istemcide aynı grafla çalışmaya devam etmek istediğinizde değişiklik izleyicisini sıfırlamak için grafı el ile yinelemeniz ve her nesnede AcceptChanges yöntemini çağırmanız gerekir.

    Grafınızdaki nesneler veritabanı tarafından oluşturulan değerlere sahip özellikler (örneğin, kimlik veya eşzamanlılık değerleri) içeriyorsa, Entity Framework SaveChanges yöntemi çağrıldıktan sonra bu özelliklerin değerlerini veritabanı tarafından oluşturulan değerlerle değiştirir. Kaydedilmiş nesneleri veya nesneler için oluşturulan özellik değerlerinin listesini istemciye geri döndürmek için hizmet işleminizi uygulamaya alabilirsiniz. Bunu yaptığınızda istemcinin nesne örneklerini veya nesne özellik değerlerini hizmet işleminden döndürülen nesneler veya özellik değerleriyle değiştirmesi gerekir.

  • Birden çok hizmet isteğinden gelen grafların birleştirilmesi, sonuçta elde edilen grafta yinelenen anahtar değerlerine sahip nesnelere neden olabilir. ApplyChanges yöntemini çağırdığınızda Entity Framework yinelenen anahtarlara sahip nesneleri kaldırmaz, bunun yerine bir özel durum oluşturur. Yinelenen anahtar değerlerine sahip grafların olmasını önlemek için şu blogda açıklanan desenlerden birini izleyin: Kendini İzleyen Varlıklar: ApplyChanges ve yinelenen varlıklar.

  • Yabancı anahtar özelliğini ayarlayarak nesneler arasındaki ilişkiyi değiştirdiğinizde, başvuru gezinti özelliği null olarak ayarlanır ve istemcideki uygun asıl varlıkla eşitlenmez. Graf, nesne bağlamına eklendikten sonra (örneğin, ApplyChanges yöntemini çağırdıktan sonra), yabancı anahtar özellikleri ve gezinti özellikleri eşitlenir.

    Yabancı anahtar ilişkisinde art arda silme belirttiyseniz, uygun asıl nesneyle eşitlenmiş bir başvuru gezinti özelliğinin olmaması sorun olabilir. Sorumluyu silerseniz silme işlemi bağımlı nesnelere yayılmaz. Art arda silmeler belirtilmişse, yabancı anahtar özelliğini ayarlamak yerine ilişkileri değiştirmek için gezinti özelliklerini kullanın.

  • Kendini izleyen varlıklar geç yükleme gerçekleştiremez.

  • Kendini izleyen varlıklar, ASP.NET durum yönetimi nesneleri için ikili serileştirme ve serileştirme desteği sunmaz. Ancak ikili serileştirme desteğini eklemek için şablonu özelleştirebilirsiniz. Daha fazla bilgi için bkz. Kendini İzleyen Varlıklarla İkili Serileştirme ve ViewState Kullanımı.

Güvenlikle İlgili Dikkat Edilmesi Gerekenler

Kendini izleyen varlıklarla çalışırken aşağıdaki güvenlik konularını dikkate almanız gerekir:

  • Bir hizmet, güvenilir olmayan bir istemciden veya güvenilir olmayan bir kanaldan gelen veri alma veya güncelleştirme isteklerine güvenmemelidir. İstemcinin kimliği doğrulanmalıdır. Bunun için güvenli bir kanal veya ileti zarfı kullanılmalıdır. İstemcilerin verileri güncelleştirme veya alma istekleri, belirtilen senaryo için beklenen ve gerçek değişikliklere uyduğundan emin olmak için doğrulanmalıdır.
  • Hassas bilgileri (örneğin, sosyal güvenlik numaraları) varlık anahtarı olarak kullanmaktan kaçının. Bu, kendini izleyen varlık graflarındaki hassas bilgileri tamamen güvenilir olmayan bir istemciye yanlışlıkla seri hale getirme olasılığını azaltır. Bağımsız ilişkilendirmelerle, seri hale getirilen varlıkla ilgili bir varlığın özgün anahtarı da istemciye gönderilebilir.
  • İstemci katmanına hassas veriler içeren özel durum iletilerinin yayılmasını önlemek için sunucu katmanında ApplyChanges ve SaveChanges çağrıları özel durum işleme koduyla sarmalanmalıdır.