Çoklu DataContext sınıfları hiç uygun musunuz?

oy
27

Tam bir ASP.net 3.5 uygulamada LinqToSql kullanmak amacıyla, oluşturmak için gerekli olan DataContext sınıfları (genellikle VS 2008 yılında tasarımcı kullanılarak yapılır). UI açısından bakıldığında, DataContext sen LinqToSQL aracılığıyla maruz ister ve LinqToSQL ORM özelliklerini kurma ayrılmaz oluşturmadığını ifade veritabanınızın bölümlerinin bir tasarımdır.

Sorum şu: Bütün masalar Yabancı Keys aracılığıyla bir şekilde birbirine büyük bir veritabanı kullanan bir projeyi kuruyorum. İlk eğim modelleyen tüm veritabanını tek büyük DataContext sınıf yapmaktır. Ben (bu uygulamada ihtiyaç olacağını eğer bilmiyorum gerçi) teoride olabilir Bu şekilde LinqToSQL aracılığıyla oluşturulan Yabancı anahtar bağlantıları kolayca benim kodunda ilgili nesneler arasında gidip vb ilgili nesneleri eklemek için kullanın

Ancak, bazı düşünce verdikten sonra, şimdi birden DataContext sınıfları, benim veritabanı içinde belirli bir ad veya mantıksal birbiriyle bölümüne ilişkin her bir tane oluşturmak için daha mantıklı olabileceğini düşünüyorum. Benim asıl sorun başlatmasını ve uygulama kaynakları üzerinde gereksiz bir dayatma empoze olurdu Veritabanı belirli alanlarına ilişkindir bireysel işlemler için bir dev DataContext sınıfı her zaman elden olmasıdır. Ayrıca, oluşturmak ve bir büyük olandan küçük DataContext dosyaları yönetmek daha kolaydır. Ben kaybedecek şey (ilişkilerin bir zincir gerçek veritabanında onları bağlayan olsa bile) LinqToSQL aracılığıyla gezilebilir olmaz veritabanının uzak bir bölüm bulunur olacağıdır. Ayrıca, birden fazla DataContext var olacak bazı tablo sınıfları olmazdı.

Birden DataContexts olmadığını (DB ad karşılık gelen) Herhangi bir düşünce ya da deneyim (veya ek olarak) bir çok büyük DataContext sınıfı (bütün DB karşılık gelir) yerine uygundur?

Oluştur 05/08/2008 saat 06:54
kaynak kullanıcı
Diğer dillerde...                            


5 cevaplar

oy
25

John'un cevap katılmıyorum. (Varlıkları veya Linq ObjectContext) DataContext bağlantı daha "iş birimi" nin daha fazladır. Bu değişim izleme vb bir açıklaması için bu blog yazısı bakınız yönetir:

SQL DataContext bir LINQ ömrü

Bu blog yazısı dört ana noktaları o DataContext'i şunlardır:

  1. ideal yaklaşımın bir "iş birimi" için uygundur
  2. Ayrıca "vatansız" sunucu işletim için tasarlanmıştır
  3. Uzun ömürlü kullanım için tasarlanmamıştır
  4. Should be used very carefully after
    any SumbitChanges() operation.
    

Ben senin LinqToSql impelmentation daha usuable ve organize olmasına yardımcı olur işin farklı türleri için farklı DataContexts oluştururken, aslında herhangi zarar vermez yapacağını birden fazla DataContext'i kullanarak sanmıyorum, göz önüne alındığında. tek dezavantajı size dmbl otomatik olarak oluşturmasına sqlmetal kullanmak mümkün olmaz olduğunu.

Cevap 07/08/2008 saat 22:02
kaynak kullanıcı

oy
4

Ben eski DB üzerinde SQL Retro uydurma LINQ ederken aynı soruya çekişmelerinin etmişti. Bizim veritabanı whopper (150 tablolar) bir parçasıdır ve bazı düşünce ve deneyden sonra ben birden DataContexts kullanmayı seçti. Bu kabul edilir İster bir anti-desen göreceğiz ama şimdilik hayat yönetilebilir hale getirir.

Cevap 05/08/2008 saat 23:51
kaynak kullanıcı

oy
3

Kabul cevap katılmıyorum zorundayız. yöneltilen soruya, sistem (aynı zamanda işe vaka) hemen hemen her masaya arasındaki güçlü yabancı anahtar ilişkileri olan tek bir büyük veritabanına sahiptir. Bu senaryoda, daha küçük DataContexts (DC'nin) iki acil ve önemli sakıncaları (hem soru bahsettiği) sahiptir içine kesiliyor:

  1. Bazı tablolar arasındaki ilişkileri kaybederler. Sen akıllıca DC sınırlarını seçmek için deneyebilirsiniz, ancak sonunda başka bir tabloya bir DC bir tablodan bir ilişki kullanmak çok uygun olacak bir durumun içine çalışır ve size mümkün olmayacaktır.
  2. Bazı tablolar birden DC'nin görünebilir. Bu kısmi sınıflarında tablo özgü yardımcı yöntemler, iş mantığını, veya başka bir kod eklemek istiyorsanız, türleri DC'nin uyumlu olmayacaktır anlamına gelir. Sen pis alır kendine özgü temel sınıf, her varlık sınıfı miras yoluyla bu çalışabilirsiniz. Ayrıca, şema değişiklikleri birden DC'nin çoğaltılmasına gerekecektir.

Şimdi bu önemli bir eksikliktir. Orada avantajları onları aşmak için yeterince büyük musunuz? sorusu performansı bahseder:

Benim asıl sorun başlatmasını ve uygulama kaynakları üzerinde gereksiz bir dayatma empoze olurdu Veritabanı belirli alanlarına ilişkindir bireysel işlemler için bir dev DataContext sınıfı her zaman elden olmasıdır.

Aslında, büyük DC örneğini veya işin tipik bir biriminde kullanmak çok daha fazla zaman aldığını doğru değildir. Aslında, ilk derece çalışan bir süreçte oluşturulduktan sonra, aynı DC sonraki kopyaları neredeyse anında oluşturulabilir .

kapsamlı yabancı anahtar ilişkileri ile tek, büyük veritabanı için birden DC'nin gelen tek gerçek avantajı biraz daha iyi kodunuzu bölümlendirirse olabilir. Ama zaten kısmi sınıfları ile bunu yapabilirsiniz.

Ayrıca, çalışma kavramının ünite asıl soruya gerçekten alakalı değildir. Işin Birim genellikle tek DC ne kadar bir çalışma anlamına gelmektedir örneği DC değil ne kadar iş, yapıyor sınıfı olan yetenekli yapmanın.

Cevap 17/06/2014 saat 21:53
kaynak kullanıcı

oy
3

John doğru olduğunu düşünüyorum.

"Benim asıl sorun başlatmasını ve bir büyük DataContext sınıfı Veritabanı belirli alanlarına ilişkindir bireysel işlemler için her zaman bertaraf uygulama kaynakları üzerinde gereksiz bir dayatma empoze olacağını ise"

Nasıl bu ifadeyi destekliyorsunuz? Denemeniz büyük DataContext bir performans darboğazı olduğunu gösterir şey nedir? Birden DataContexts olması yani hemen hemen hiç, bir sürü birden fazla veritabanı olması gibidir ve benzeri senaryolarda mantıklı. Birden DataContexts ile çalışıyorsanız, nesnelerin hangi DataContext ait olan izlemek gerekiyor ve aynı veri bağlamında olmayan nesneleri ilişki kuramıyorum. Yani gerçek bir yararı için pahalı bir tasarım kokusudur.

@Evan Birden fazla datacontext olmamalıdır özellikle bu yüzden "bir bağlantı daha 'iş birimi' (varlıkları veya Linq ObjectContext) DataContext bir daha fazlasıdır". Neden aynı anda birden bu bir "iş birimi" isteyeyim?

Cevap 27/08/2008 saat 02:11
kaynak kullanıcı

oy
1

LINQ to SQL ve LINQ ile LINQ to Tecrübelerime bir DataContext veritabanına bir bağlantı eş anlamlıdır. Birden fazla veri depolarını kullanmak olsaydı Yani birden DataContexts kullanmak gerekir. Benim bağırsak tepki, tabloların çok sayıda kapsayan bir DataContext ile aşağı yavaş kadarının fark olmaz olduğunu. Eğer Ancak yaptıysak, tabloların diğer setleri için herhangi bir ilişki var ve birden bağlamları oluşturmaz tabloları izole nereye daima noktalarda mantıksal veritabanı bölünmüş olabilir.

Cevap 05/08/2008 saat 10:57
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more