2016-11-09 139 views
0

說我有這些類:實體框架的泛型類型

public class Message 
{ 
    public int MessageId { get; set; } 
    public string Text { get; set; } 
    public DateTime CreateDate { get; set; } 
    public virtual ICollection<Media> Media{ get; set; } 
} 

public class Image 
{ 
    public int ImageId { get; set; } 
} 

public class Video 
{ 
    public int VideoId { get; set; } 
} 

我想在Message類集合Media能夠容納視頻和圖片。我會如何去做這件事?

我懷疑我需要爲每種可以使用的媒體類型創建一個列表。我希望有一個更清潔的解決方案。

+1

擁有一個集合,可以將視頻和/或圖像保存爲不乾淨的解決方案。更清潔的解決方案是爲視頻和圖像單獨收集...順便說一句,如果視頻和圖像繼承相同的類,如「媒體」,這是可能的。 –

+0

@ M.kazemAkhgary啊好吧,謝謝 –

+0

是的,我同意@ M.kazemAkhgary,這隻會創建一個惡夢來維護。 – jdmdevdotnet

回答

0

如果您在考慮通用實現,請考慮帶有媒體基類的IMedia接口。

例如:

public interface IMedia 
{ 
    public readonly IEnumerable<MediaResource> MediaResources {get; set;} 
} 

public interface IMediaResource<T> where T: class 
{ 
    public Type MediaId; 
    public void SetMedia<T>(int mediaId); 
} 

public class MediaResource<T> : IMediaResource<T> //Container for a media resource 
{ 
    public Type mediaType { get; private set;} 
    public int mediaId {get; private set;} 

    public void SetMedia<T>(int mediaId) 
    { 
     this.mediaType = typeof(T); 
     this.mediaId = mediaId; 
    } 
} 

public class Media : IMedia 
{ 
    public readonly IEnumerable<MediaResource> MediaResources {get; set;} 
} 

T是一個通用的類型。你可以使用像Image,Bitmap等類或其他任何東西。這可能包含任何東西。您可以在T上添加一個限制,以便它不僅僅是類,而是來自基本媒體類型。