2008-12-16 15 views
9

Bir MVC uygulamasında ADO.NET EF kullanıyorum. ObjectTontext'i HttpContext.Current içine koymayı düşünüyorum, böylece aynı istekte bulunan tüm mantık her seferinde aç/yok etmek zorunda kalmadan ona erişebilir. Ancak, ObjectContext örneklerini yönetmenin iyi bir yolu olup olmadığından emin olabilirim. Bu ihtiyaca yönelik 2 soru var: bu tesiste iş parçacığı yerel alan tarafından desteklenen ve ASP.NET istekleri işlemek için havuzundan konuları kullanırADO.NET Entity Framework'ü Yönetme ASP.NET MVC'deki ObjectContext

  1. HttpContext.Current gibi, bir ObjectContext örneği HttpContext koymak mümkündür Bir istek ile, havuzdan aynı konu üzerinde çalışan bir istek için görünür olacak?

  2. nasıl ObjectContext bertaraf/açıklığın çok önlemek ve yaşanabilecek çakışmaları önlemek için hem ASP.NET MVC yönetilmesi gerektiğini düşünüyorsunuz?

cevap

1

- başına iplik (veya özel ile kullanımı DI/IoC cotnainer (Birlik, Windsor) per- istek) ömür boyu. Hatırladığım kadarıyla genellikle onu oluşturmak için bir sorun olmamalı yani

Reklam 2, to SQL Linq, DataContext nesnesi hafif nesne olarak kabul edildi. Umarım EF için benzerdir.

2

Ben vs. StructureMap, AutoFac, Windosor gibi bir IoC kapsayıcı kullanmak

Ben Todd ile anlaşmak
5

kullanın Repository pattern. Denetleyiciyi geçersiz kıl. DataContext'i de elden geçiren Deposu bertaraf et. IoC öneri için

0

teşekkürler. Unity'yi kullandım ve HttpContext.Current aracılığıyla nesneleri depolamak/almak için istek başına ömür boyu yönetici kullandım. İyi çalışıyor gibi görünüyor. İsteğe başına tek ObjectContext kullanarak

+0

HttpContext.Current öğesine bir nesneyi nasıl eklediğinizi göstermek için kod yazabilir misiniz? Öğeleri koleksiyonuna eklediniz mi, yoksa ...? – Cynthia

+0

Özel Unity yaşam boyu yöneticisindeki kod: HttpContext.Current.Items [key] = newValue –

2

iyi bir fikirdir. bunu kendiniz ele varsa

sen HttpContext.Items koleksiyonunda bağlamı koymak gerekir. EndRequest'te bağlamın atıldığından emin olmanız gerekir. Belirtildiği gibi, bazı IoC çerçeveleri bu OTB'yi destekler - genellikle PerRequest kapsamı/kullanım ömrü olarak adlandırılır.