0

我想为我的数据库中的图像创建一个表,该表可以被几个不同的模型使用。我正在使用实体框架并已将我的图像类定义如下:

public class Images
{
    public int ID { get; set; }
    public String Name {get; set;}
    public byte[] ImageData { get; set; }  
    public string Type { get; set; }
}

然后,我想从需要保存图像的任何其他模型链接到此。例如

public class Project
{
    public int ID { get; set; }
    public String Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public virtual ICollection<tImages> Images { get; set; }

}

并且

public class User
{
    public int ID { get; set; }
    public String UserName { get; set; }
    public virtual ICollection<tImages> Images { get; set; }
}

问题是实体框架正在将项目和用户的外键添加到图像表中。我猜我有点预料到这一点。

我想要的是定义一个可用于索引到我的图像表的图像键。我只是不确定如何定义类来获得这种影响。例如,我如何定义我的实体类来实现以下结果:

项目表

//ID    Name        StartDate   EndDate     Image
//1     Project1    05/02/2013  06/04/2013  PROJ01IMG

用户表

//ID    UserName    Image       
//1     Bob         USER01IMG       

图像表

//ID  Name          Imagekey    ImageData           Type
//1   img1          PROJ01IMG   0xFFF00F1 .. etc    JPEG
//2   teamphoto     PROJ01IMG   0xFEB0011 ..etc     JPEG
//3   outline       PROJ01IMG   0xFFF0AA3 ..etc     PNG
//4   bob           USER01IMG   0xFFF01233 ..etc    JPEG

当然,拥有外键可能是正确的方法,我不应该担心吗?只是我有很多模型,而且它们都需要存储图像,所以我宁愿将它们放在一个表中,而不是多个图像表中,因为我认为这将使所有图像的搜索/画廊等更容易。

我觉得这是一个完整的菜鸟问题,我遗漏了一些明显的东西,如果是的话,我深表歉意。

4

1 回答 1

1

如果您不希望 EF 映射 FK,而是将根据图像键手动填充列表,请像这样定义您的实体。但我认为你最好用你所拥有的,使用FK。

public class Project
{
    public int ID { get; set; }
    public String Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    public string ImageKey { get; set; }
    [NotMapped]
    public List<Image> Images {get; set;}
}

public class User
{
    public int ID { get; set; }
    public String UserName { get; set; }
    public string ImageKey { get; set; }
    [NotMapped]        
    public List<Image> Images {get; set;}
}

我想你可以尝试像这样定义你的类,看看它是否是你想要的:

public class Images
{
    public int ID { get; set; }
    public String Name {get; set;}
    public byte[] ImageData { get; set; }  
    public string Type { get; set; }

    public virtual User User { get; set; }
    public virtual Project Project { get; set; }
}

public class Project
{
    public int ID { get; set; }
    public String Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }

}

public class User
{
    public int ID { get; set; }
    public String UserName { get; set; }
}

这应该将 FK 映射到 Project 和 User 中的图像,这是我认为您真正想要的。

于 2013-02-07T20:06:42.353 回答