实体框架泛型类型

时间:2016-11-09 17:31:13

标签: c# 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; }
}

我希望Media课程中的集合Message能够保存视频和图片。我该怎么做呢?

我怀疑我需要为可以使用的每种类型的媒体创建一个列表。我希望有一个更清洁的解决方案。

1 个答案:

答案 0 :(得分: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是通用类型。您可以使用像Image,Bitmap等类或其他任何类。这可能包含任何内容。您可以在T上添加限制,使其不仅仅是类,而是从基础媒体类型派生。