2016-11-09 10 views
0

は、私は、これらのクラスを持っていると言う:Entity Frameworkのジェネリック型

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

一般的な実装について考えている場合は、Mediaベースクラスを使用した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がジェネリック型です。画像やビットマップなどのクラスを使用することができます。これには何かが含まれています。 Tに制限を加えることで、クラスだけでなく基本メディアタイプから派生させることができます。

関連する問題