0

我对EF不是很有经验,我试图找出什么是正确的方式或什么是创建实体的选项,它的集合可以包含在其他实体(不同的表格)中。 比方说,我有三个现有的类(ModuleA,ModuleB,ModuleD),我想包含它自己的Data实体集合。 我想要一个数据实体的表,但我不喜欢每个FK有三个可空的Guid列的想法。 这也给我错误应用迁移(“...可能会导致周期或多个级联路径”) - 这可能可以通过手动删除级联删除和删除数据解决,但我不喜欢这个想法。如何建模更多的实体引用同一种类的单一表内

我最希望的是在FK的所有三个模块上的单个(共享)Guid属性,这是不可能的,至少在同时所有三个主表中都不存在相同的ID(因为它创建DB中有三个FK)。

class Data 
{ 
    public int Id {get; set;} 
    public byte[] Values {get; set;} 

} 

class ModuleA 
{ 
    public Guid Id {get; set;} 
    public ICollection<Data> Data {get; set;} 
    // some other stuff... 
} 
class ModuleB 
{ 
    public Guid Id {get; set;} 
    public ICollection<Data> Data {get; set;} 
    // ... 
} 
class ModuleC 
{ 
    public Guid Id {get; set;} 
    public ICollection<Data> Data {get; set;} 
    // some different other stuff... 
} 

回答

0

您可以创建3模块对数据多到多个表是这样的:

class Data 
{ 
    public int Id {get; set;} 
    public byte[] Values {get; set;} 

} 

class ModuleAData 
{ 
    public ModuleAId {get; set;} 
    public DataId {get; set;} 
} 

class ModuleA 
{ 
    public Guid Id {get; set;} 
    public ICollection<ModuleAData> Data {get; set;} 
    // some other stuff... 
} 
+0

感谢shibormot但是这3个表只是一个表有数据的缘故。然后,我宁愿使用3个数据表,最后有4个,而不是7.这种方法还有其他好处吗?我假设这个模型的数据操作不会很简单。 – JankoHrasko

+0

一个好处是你可以在不同的模块中使用相同的数据。其他:如果数据对于所有模块具有相同的含义,那么在客户端上,您可以使用单个逻辑(某些读取和写入值的类)来缓存它,而不需要为不同模块重载此逻辑,因为它将是3个类,而您将需要3次重载。如果db和你的.net逻辑总是耦合在一起,那就不是问题。如果逻辑简单,它也不是问题。但是,如果有人决定用复杂的数据逻辑重写客户端使用4个表格结构而不使用简单的重载(sql?)语言。不知道你的应用程序) – shibormot

相关问题