2010-04-07 11 views
6

Entity Framework v4 kullanıyorum. Bir grup skaler özellik ve bir Arabirim tipi döndüren bir koleksiyon içeren bir POCO sınıfı oluşturdum. EF modelinde bu ilişkiyi nasıl oluşturabilirim? Farklı öğeler içeren bir koleksiyonu nasıl gösterebilirim, ancak hepsinin ortak bir arayüzü var mı? İşte elde etmeye çalıştığım şeyin bir örneği.Varlık Çerçeve ve Modelleme Koleksiyonları bir arabirim ile dönüş türü olarak

interface IPatientDocument{} 
public class Lab : IPatientDocument{.....} 
public class Encounter : IPatientDocument{...} 
public class MedicationLog : IPatientDocument{...} 

//Incomplete class listing 
//Once I have aggregated the different doc types, I can then use Linq to Obj to retrieve the specific doc type I need. Currently I have about 26 doc types and do not want to create a collection for each one 
public class Patient 
{ 
    IList<IPatientDocument> DocumentCollection; 
} 
+0

Bu soruya bakmaya devam ediyorum çünkü gerçekten çok ilginç geliyor. Ama bence biraz daha fazla bilgiye ihtiyacı var. Kod örneği belki? Bunu yapmak için bir T4 şablonunu açmanız gerekecek mi acaba? – itchi

+0

Evet, lütfen daha ayrıntılı çalışın. Sizin IPatientDocument türleriniz (Lab, Encounter, MedicationLog) POCO tipleriniz mi? Hasta bir POCO tipi midir? Bütün bunlar modelinizin parçası mı? –

cevap

0

Bunun tamamen yasal olup olmadığını bilmiyorum. Bir temel sınıf kullanarak uygulayabilseydiniz, büyük olasılıkla izin verilen tür başına devralma işlemi yaparsınız. o .NET yenilikler olarak sadece araştırmaya değer olabilir Eğer ko- ve kontra varyans içine alıyoruz seçme keyfi türlerini çalışıyorsanız, TPT kullanıyorsanız Ama 4.

3

(çok çok dikkatli olun Varlık Tabanı ile Tablo Tipi) miras. 26 doc türünüz varsa Özellikle. TPT devralma için kırık SQL nesli üzerinde I did a blog post ve ayrıca opened a bug on Microsoft Connect. MS, problemi kabul etti ve üzerinde çalıştıklarını söylüyorlar, ama nefesinizi tutmuyorlar. Sorunun kabul edilmesi 3 ay sürdü ve bunların hepsi “TPT hiyerarşileriyle ilgili performans sorunlarının farkındayız. Şu anda çözümleri araştırıyor ve gelecekteki bir sürümde bu alanda iyileştirmeler yapmayı bekliyoruz” dedi.

26 doc türünde, temel bir sorguda bile, EF'in SQL'i (8000 satırlık bir mahallede olacak) oluşturması ve SQL Server'ın işleyebilmesi yaklaşık 2 dakika sürer. Saçma sapan alt sorgularda 30 seviye derin olacak. Her ne pahasına olursa olsun TPT mirasından kaçının. Bir uygulamayı yeni başlatıyorsanız, işe yaramış gibi görünmektedir, çünkü genellikle yalnızca birkaç alt türünüz vardır, ancak daha fazlasını ekledikten sonra uygulamanız bir taramayı yavaşlatacaktır.

+0

+1 ancak daha önce aylar önce okuduğum blog gönderilerinden dolayı. :) Şu anda fiyatı ödediğimiz bir TPT uygulaması (30+ sınıf) geçirdim. Blog yayınınız bana sadece ben olmadığımı söyledi. Şimdi etrafta ilerliyorum. – itchi

İlgili konular