我想给几个实体存储文件的可能性。就像给定的客户一样,存储其身份证副本或产品,存储其进口文件以及质量证书。

我不希望这些文件存储在相同的实体行中,而是为附件创建了单独的表。解耦它还使以后有机会决定我是否要直接存储文件,存储位置或某些CMS访问令牌。

那么,如何在EF中使此附件表与可能具有该功能的所有其他表之间具有这种关系呢?

模式样本:

public class Customer
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Product
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Attachment
{
    [Key]
    public int Id { get; set; }
    //Relation property
    public int ParentId { get; set; }
    public string Name { get; set; }
    public byte[] Content { get; set; }
}

最佳答案

有不同的可能性要考虑

方法1

制作附件表以存储表名和ID

然后,当您得到某个对象Product时,使用ProdcutId检查它是否具有附件,该附件的表名可以通过反射来访问

优点:


您摆脱了导致some toubles的GUID
您具有仅Id RefrencedTable RefrencedId的简单表结构


缺点

访问附件列表将执行全表扫描(您可以使用索引来最大程度地减少这种影响),仍然需要与字符串RefrencedTable进行比较

方法2

在所有需要的表中定义一个Attachments列表,这将为每个表创建一个外键

优点


更容易从任何其他对象访问Attachments列表
仍然没有指导


缺点

可能是非常大的表,其中包含很多空值和索引

方法3

使用共享的GUID

优点


结构简单
一个索引(check more about clustered index


缺点

处理所有表必须唯一的GUID序列

关于c# - 常见的“附件”表如何链接到Entity Framework Core中的几个表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43001000/

10-13 09:31