说我有这些课程:
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
能够保存视频和图片。我该怎么做呢?
我怀疑我需要为可以使用的每种类型的媒体创建一个列表。我希望有一个更清洁的解决方案。
答案 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上添加限制,使其不仅仅是类,而是从基础媒体类型派生。