Entity Framework 4 / POCO - Nereden başlamalı? [kapalı]


183

Bir süredir programlama yapıyorum ve daha önce LINQ-To-SQL ve LINQ-To-Entities'i kullandım (varlıkları kullanırken bir Entity / Table 1-1 ilişkisinde olmasına rağmen - yani L2SQL'den çok farklı değil)

Inversion of Control, İş Birimi, POCO ve depo kalıpları hakkında çok fazla okuma yaptım ve bu metodolojiyi yeni uygulamalarımda kullanmak istiyorum.

Mücadele ettiğim yer, EF1 için EF1 hakkında bilgi sahibi olmayan açık, özlü bir başlangıç ​​kılavuzu bulmaktır.

Cevaplamam gereken belirli sorular:

Önce kod / önce model? EF4 ile ilgili artıları / eksileri (yani, önce kod yaparsam, daha sonraki bir tarihte kodu değiştirir ve DB modelimi yeniden oluşturmanız gerekir - Veriler korunur ve dönüştürülür veya düşürülür mü?)

Önce kod gittiğimi varsayarak (EF4 bunu bir DB şemasına nasıl dönüştürdüğünü görmek istiyorum) nasıl başlayabilirim? Oldukça sık, varlık şemaları ile "Bu benim varlık modelim, şimdi yapacağım ..." yazılı makaleler gördüm - Ne yazık ki, tasarımcıda modeli oluşturup oluşturmadıklarını, kod oluşturmak sonra başka otomatik kod üretimi durdu -VEYA- Onlar kodladım (POCO)? ve bir şekilde onları deisgner görünümüne mi aktardı?

Gerçekten ihtiyacım olan şey, "sihir" in nereden geldiğini ve sadece doğrudan DB'den bir EF modeli oluşturmuyorsam bunu nasıl ekleyeceğimi anlamak olduğunu varsayalım.

Sorunun biraz belirsiz olduğunu biliyorum ama ne bilmediğimi bilmiyorum - Yani herhangi bir girdi / düzeltme / açıklama takdir.

Söylemeye gerek yok, kimsenin burada oturup bana EF öğretmesini beklemiyorum - sadece bazı iyi öğreticiler / forumlar / bloglar / vb. tam tüzel kişi yeni başlayanlar için


3
bağlantılarınızın ömrü boyunca gerçekten GERÇEKTEN dikkatli olun: bit.ly/fi83NV Bağlamları depolara soyutlarken gerçekten bilmeniz gereken bir şey. Çalışıyor gibi görünebilir, ancak aslında yavaş yavaş daha fazla açık bağlantıyı
izliyor

@BRitishDeveloper - Çok iyi tavsiye. Bu aslında bizi yakaladı ama tam tersi - Depoları almak için bir IoC kapsayıcısı kullanıyorduk ve depoya atanan bağlamın uzun bir süre sonra bağlantıyı kapatacağı ancak imha edildiği / benzer. Sonunda bağlamı, normal bertaraf etme durumunu ve gerektiğinde başka bir tane oluşturmamızı sağlayan bağlantı durumunu kontrol eden bir IsDisposed () ile genişlettik.
Temel

Bir başka kullanışlı ipucu, yeni bir bağlam elde ederken, eski bağlamla ilişkili nesnelerin uygun değişiklik izlemesine sahip olmayacağı ve bağlam eşleşmesi sorunlarına neden olacağıdır. , tüm varlıklarınızı yeniden almanız gerekir. Daha ilginç hale getirmek için, aslında zaman zaman yan yana çalışan 2 vardı ve 2 güzel arasında eşlemek için bazı kod yazma sona erdi ...
Temel

1
@Basiclife Ben de aynı sorunla karşılaştı :) Bir süredir müstakil varlıkları güncelleme hakkındaki düşüncelerimi yazmak istedim ve beni sadece bunu yapmaya teşvik ettiniz: britishdeveloper.co.uk/2011/03/…
12'de İngiliz

Yanıtlar:


56

Bu makaleler ilgi çekici olabilir ... dizi gerçekten bir POCO yaklaşımının avantaj ve dezavantajlarına giriyor.

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading. aspx

http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

Bu makalelerde yazar, Depo ve İş Birimi kalıplarının uygulanmasında en iyi uygulamaları açıklayan gelecekteki makalelerden bahseder, ancak bulamıyorum. Bu makaleler iyi yazılmıştır ve bu yazardan daha fazla okumak istiyorum.


2
Tasarımcıyı kullanarak Entity Framework ile zaten rahat olan biri olarak, bu POCO için harika bir girişti.
nathanchere

1
Eğer İş Birimi takibi arıyorsanız blogs.msdn.com/b/adonet/archive/2009/06/16/…
Mike

11

Ben de bununla karşılaştım: http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

Bu size ilk olarak kod için adım adım bilgi verir. EF4 için CTP 3 gerektirir (İndirme bu makaleden bağlantılandırılmıştır).

Bu, peşimde olduğum şeye oldukça yakın (her ne kadar ideal olarak bir CTP'ye dayanmayan bir çözüm tercih edilirdi)


Not: Bu CTP başlangıçta VS2010 Beta içindi ancak VS2010 RTM'yi de destekliyor.
Temel

7

Yarım saat kadar sürmenizi ve mevcut VS'nizde sabit bir EF1.0 modeli oluşturmanızı öneririm. Bu, EF 4.0'ın metaforlarını ve kavramlarını anlamanız için size uzun bir yol sağlayacaktır. Sadece basit bir Müşteri, Ürün ve Siparişleri kırbaç db ... Ben kendi yapmak ve Northwind kullanmamanızı öneririz.



3

Lerman'ın kitabını veya "Pro linq nesne-ilişkisel haritalama" gibi daha basit bir şeyi alabilirsiniz. Tüm kavramlar hala POCO ile aynıdır, ancak şimdi kod üretimini devre dışı bırakmalı ve doğrudan edmx csdl'de modelinize eşlemelisiniz (veya kendi POCO oluşturucunuzu oluşturmalısınız). Tüm haritalama ilkeleri de aynıdır. Her neyse, çalışma zamanında POCO nesnenizden türetilen proxy ile çalışıyorsunuz, böylece müdahale desteği (POCO özelliklerinizin sanallaştırılması) hakkında endişelenmelisiniz.



2

İşte bu örneklerde oldukça iyi görünmemişti Entity Framework için POCO şablonu. Ayrıca ADO.NET ekip bloguna da göz atmak isteyebilirsiniz . Başlangıçta (EF v1.0) EF bilginiz için bir temel olarak başlamak istiyorsanız, Julia Lerman'ın Programlama Varlık Çerçevesi kitabını çok eksiksiz buldum .


Teşekkürler - Kitabı görmemiştim ama her iki linki da okudum. Şablonda izlenecek yol, POCO nesnelerine tanımlandıktan sonra ek işlevin nasıl eklenebileceğini açıklamakta yararlıdır (örn. Tembel yükleme) ancak (ve burada bariz bir şeyi kaçırıyor olabilirim) aslında nasıl başlanacağını açıklamaz (yani basitçe belirtildiği gibi bir sınıf oluşturmak onu bir varlık yapmaz veya bir model ile ilişkilendirmez) Blog ile benzer bir deneyim yaşadım. Yine de kitabı almayı düşüneceğim - Umut verici görünüyor - Teşekkürler.
Temel

2
Julia Lerman kitabıyla ilgili olarak, EF4'ü kapsayan ikinci bir baskı üzerinde çalıştığı belirtilmelidir: learnentityframework.com/LearnEntityFramework/book/… . Planlanan yayın tarihinin bu yıl Mayıs ayında olduğunu bir yerde okuduğumu hatırlıyorum, ancak kaynağı artık bulamıyorum. Ayrıca sadece bu siteyi buldum: nakedobjects.net/home/index2.shtml
Slauma

Slauma, sağladığınız bağlantı tam olarak ihtiyacım olana benziyordu - ancak bir şekilde karmaşıklığı gizleyen bir üçüncü taraf "Çıplak Objeler" kütüphanesi kullanıyor - Bir dakika için, çatlacağını düşündüm
Temel


1

Julia Lerman'ın her biri yaklaşık 10 dakika olan güzel bir tanıtım videoları serisi var . Giriş niteliğindedirler, ancak bazı potansiyel öğrenme engellerini ortadan kaldıran birçok pratik ipucu vardır. Özellikle SQL Server Profiler kullanarak gerçek SQL go izlerken onun gösteri sevdim.


1

Bağlantısı kesilmiş cenarios kullanacaksanız, özel Bölüm 4'te Julie Lerman kitabını okumanızı tavsiye ederim: "DbContext'in Programlanması".

Bloglarda vb. Birçok örnek buldum, ancak neredeyse hepsi bağlantılı cenarios hakkında.

Ben de başlıyorum. ve bu kitap bana çok yardımcı oldu. Bu arada, onun üç kitabını aldım.



0

Vay be, birçok cevap. POCO + arayüzleri + depolarını tamamen üreten T4 şablonlarının ince bir sürümünü içeren bir örneğe ne dersiniz?

https://entityinterfacegenerator.codeplex.com


Depozitoları / bağlamları test etmek için ilginç ve kullanışlıdır, ancak neden varlıkları kendileri soyutlamanız gerekir? Tanım olarak, içinde herhangi bir işlevsel kod olmamalıdır.
Temel

Haklısın. Çoğunlukla, insanların ayrı arayüzlere sahip olması gerekmez. Ancak, dairesel referansları çözmek isteyen ve gerçek sınıfları değil, arayüzleri üçüncü bir tarafla paylaşmak isteyen insanlara yardımcı olur. Şirketinizin paylaşımda ayrıntılı bir uygulama gerektirmeyen 3. taraf entegrasyonu ile bir denetimden geçmesi gerekiyorsa bu çok yardımcı olacaktır.
İnanıyorum2014
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.