我想给几个实体存储文件的可能性。就像给定的客户一样,存储其身份证副本或产品,存储其进口文件以及质量证书。
我不希望这些文件存储在相同的实体行中,而是为附件创建了单独的表。解耦它还使以后有机会决定我是否要直接存储文件,存储位置或某些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/