Farklı bir veri modeli polimorfik yapmak için bir yolu olsaydı çok daha kolay olurdu yeni bir proje üzerinde çalışmaya başlıyorum. Entity Framework 4.0'ı (piyasaya sürüldüğünde) kullanmayı düşünüyorum, ancak gerçekten çalışıp çalışamayacağını belirleyemedim.Bir .NET Polimorfik Veri Çerçevesi var mı
İşte temel senaryo. Bir yorum sistemi uygularım ve bunu birçok farklı modele bağlayabilmek istiyorum. Belki bir kullanıcının profiline yorum ve bir web sayfasındaki yorumları istiyorum. Geçmişte bunu yapmamın yolu, kişi tablosu ile yorum tablosu arasındaki ilişkiyi, web sayfası tablosu ile yorum tablosu arasındaki ilişkiden ayrı olarak oluşturmaktır. Bununla birlikte, bunun veri tabanında aşırı karmaşık bir tablo yapısına yol açtığını düşünüyorum.
Yalnızca yorum yapmak istediğim nesnelere bir arabirim ekleyebilseydim ve sonra veritabanındaki tablo yapısını tek bir ilişkiye basitleştirebilirsem en iyi olurdu.
Karşılaştığım sorun, bu tür bir şeyin nasıl yapılacağı hakkında bilgi edinmek için doğru terminolojiyi bilmiyorum. Herkesin sağlayabileceği herhangi bir yardım büyük takdir edilecektir.
Evet, bu tam olarak düşündüğüm şeyin tipi. Tip-dökümün şeffaf bir şekilde ele alınmasının bir yolu olabileceğini umuyordum, ama mermiyi ısırmak ve yapmak zorunda kalacağım gibi görünüyor. Bu durumda, target_object_id öğesinin yanı sıra muhtemelen hedef nesnenin System.Type'ı olacak olan comment_type'ı da kontrol etmeliyim. Bununla çok çalışmam gerekmedim, o yüzden öğreneceğim. – Josh
Bu, amacınızın, veritabanındaki, orijinal sorudan aldığım tablo sayısını azaltmak olduğu varsayılıyor. Her yorum türü için "mapper tabloları" oluşturmaya eğilimli olabilirim, ancak tüm yorumları bir yorum tablosunda tutmaya devam edebilirim. Post_id sütunu ve bir comment_id sütunu içeren bir "post_comments" tablosuna sahipseniz, görünümünüz veya modeliniz belirli bir posta kimliği için yorumlar gerektirdiğinde sorgulayabilirsiniz. – Jay
Evet, doğru, tablo sayısını ve yazılması gereken kod miktarını azaltmak için. Mükemmel bir dünyada, Ruby'nin karışımları gibi bir şey işe yarayacaktı, ama bu gerçekten C# 'da mümkün değil. Büyük bir anlaşma değil, sadece bir şeyi kaçırdığımı umuyordum. – Josh