实体框架泛型类型
本文关键字:泛型类型 框架 实体 | 更新日期: 2023-09-27 18:17:20
假设我有这些类:
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
集合能够保存视频和图像。我该怎么做呢?
我想我需要为每种可能使用的媒体类型创建一个列表。我希望有一个更干净的解决方案。
如果你正在考虑一个通用的实现,那么考虑一个带有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上添加一个限制,这样它就不仅仅是一个类,而是派生自一个基本媒体类型。