我有一个BlobEntity表,其中包含我的应用程序中许多其他表(tableX,tableY,tableZ等等)的文件路径。
BlobEntity表中所有其他表之间的关系是一对多。
示例:
tableX - > BlobTable(OTM)
tableY - > BlobTable(OTM)
tableZ - > BlobTable(OTM)
,关系是:
public virtual ICollection<BlobEntity> BlobEntity { get; set; }
我不确定这是否是一个问题,但实体框架Code First在BlobEntity表中为每个源表创建一个新的FK列。
就我而言,BlobEntity包含三个用于tableX,tableY和tableZ的FK列。
为了提高效率,我宁愿在BlobEntity中创建一个包含源表的FK的列。
合理吗?
请告知......
感谢。
答案 0 :(得分:2)
不,即使在普通的旧SQL中也无法做到这一点。 你可以有一个指向多个表的foreing键;这就是你需要的原因 三栏。
如果你想做这样的“技巧”,你必须手动管理关系(我的意思是,没有真正的FK),但你不能将它映射到EF。
这个怎么样?
public class EntityA
{
public int Id { get; set; }
public int MyFileID {get;set;}
public virtual MyFiles MyFile { get; set; }
}
public class EntityB
{
public int Id { get; set; }
public int MyFileID {get;set;}
public virtual MyFiles MyFile { get; set; }
}
public class MyFiles
{
public MyFiles()
{
// ReSharper disable once VirtualMemberCallInContructor
FilesForEntityA = new List<EntityA>();
// ReSharper disable once VirtualMemberCallInContructor
FilesForEntityB = new List<EntityB>();
}
public int Id { get; set; }
public int? EntityAId {get;set;}
public int? EntityBId {get;set;}
public virtual ICollection<EntityA> FilesForEntityA { get; set; }
public virtual ICollection<EntityB> FilesForEntityB { get; set; }
}
通过这种方式,您可以使用FK,并且可以轻松管理多个实体。 显然,如果每个实体都有许多文件,则可以采用N对N关系,例如this。