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...
}
感谢shibormot但是这3个表只是一个表有数据的缘故。然后,我宁愿使用3个数据表,最后有4个,而不是7.这种方法还有其他好处吗?我假设这个模型的数据操作不会很简单。 – JankoHrasko
一个好处是你可以在不同的模块中使用相同的数据。其他:如果数据对于所有模块具有相同的含义,那么在客户端上,您可以使用单个逻辑(某些读取和写入值的类)来缓存它,而不需要为不同模块重载此逻辑,因为它将是3个类,而您将需要3次重载。如果db和你的.net逻辑总是耦合在一起,那就不是问题。如果逻辑简单,它也不是问题。但是,如果有人决定用复杂的数据逻辑重写客户端使用4个表格结构而不使用简单的重载(sql?)语言。不知道你的应用程序) – shibormot