实体框架泛型类型

本文关键字:泛型类型 框架 实体 | 更新日期: 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上添加一个限制,这样它就不仅仅是一个类,而是派生自一个基本媒体类型。