2010-01-06 17 views
8

Entity Framework 4, POCO ve Code-Only kullanarak bir proje kurmaya çalışıyorum.Gezinme özelliğine sahip bir Arabirimin kullanılması

Bir gezinme özelliğinin türü için varlık çerçevesinin arayüz olması mümkün mü?

"Görev" sınıfım var. Bir Görev, her biri ayrı bir sınıf tarafından temsil edilen ve ayrı tablolarda saklanan bir kullanıcıya veya bir gruba atanabilir. sınıflar şuna benzer:

public class User : IAssignable 
{ 
    public String Name { get; set; } 
    public int ID { get; set; } 
    public String Email { get; set; } 
    public String Password { get; set; } 
} 

public class Group : IAssignable 
{ 
    public String Name { get; set; } 
    public int ID { get; set; } 
    public String Manager { get; set; } 
    public String Department { get; set; } 
} 

public class Task 
{ 
    public String Title { get; set; } 
    public DateTime DueDate { get; set; } 
    public String Details { get; set; } 
    public IAssignable AssignedTo { get; set; } 
} 

bir yolu var mı may varlık çerçevesinde bir navigasyon özelliği olarak AssignedTo özelliği? EF'nin, Kullanıcılar tablosuna veya Gruplar tablosuna bakıp bakmayacağını bilmesi için bir tür ayrımcı olması gerektiğini düşünüyorum ancak Code-Only veya EDMX kullanarak eşleştirmeyi anlayabiliyorum.

+0

Ayrıca buna bir çözüm bulmak istiyorum. – Ciel

cevap

0

EF4 tarafından desteklenen Metin Şablonu Dönüştürme Araç Takımı (T4) kullanarak kendinizi çok fazla işten kurtarabilirsiniz. Ben birim test için mükemmel bir taban sağlamanın yanı sıra bir yol etrafında manuel Poços ve arayüzler yaratmak arayan iyi bir 12 saat sonra bu bir,

http://blogofrab.blogspot.com/2010/08/maintenance-free-mocking-for-unit.html

bulundu, bu ilişkilere dayanarak seyir özelliklerini otomatik olarak oluşturur senin modelinde tanımlanmış.

1

Ben bu eski bir soru olduğunu biliyorum ama hayır, Varlık Framework hiçbir özelliği (orada Bir navigasyon özelliğini bir arayüz tipi ile eşleştirmenizi sağlayan en son sürüm 6).

Ancak, birden çok gezinme özelliğini, beton türleri (ve yalnızca bir tane ayarlanabilecek bir kısıtlama) ile eşleştirebilir ve arabirim türünüzün eşlenmemiş özelliğini sağlayarak beton gezinme özelliklerini tek bir özelliğe birleştirebilirsiniz. Ne yazık ki, bu sizin sorgularınızı daha karmaşık hale getirebilir, çünkü belirli sorguların hangi somut gezinme özelliklerinin referans olduğunu bilmesi gerekir (ve eşleştirilmemiş arayüz özelliğinize karşı sorgulayamazsınız). Polimorfik navigasyon özellikleri için destek etrafında önemli bir karmaşıklık bulunmaktadır. AssignedToId int gibi bir sütuna eşlendiğini varsayalım, orijinal AssignedTo özelliğinizi sorgulamak için ne yapılması gerektiğini düşünün. Birleşiminiz olması veya hem User hem de Group varlık kümelerine katılmanız ve belirli bir AssignedToId ürününün yalnızca bunlardan birinde görünmesini ummanız gerekir. Bu, Table-Per-Concrete (TPC) tipi eşlemenin kullandığı yaklaşımdır, ancak yalnızca sınıf kalıtımıyla (arabirimlerle değil) ve katılımcı türlerde farklı kimlikler oluşturmak için dikkatli bir planlama ile çalışır.