在没有PK的实体框架中映射属性?

时间:2011-07-21 12:37:22

标签: entity-framework entity-framework-4 foreign-keys model-associations

我尝试创建一个带有3个表的EF模型(VS2010,.NET4),每个表都带有一个名为Sync_ID的PK。

TABLE_HEAD :( Sync_ID(PK),GRID_ID int,SERIALNUMBER int,YEAR int)

TABLE_POINT :( Sync_ID(PK),GRID_ID int,SERIALNUMBER int,YEAR int,POINT_NUMBER int)

TABLE_PLANT :( Sync_ID(PK),GRID_ID int,SERIALNUMBER int,YEAR int,POINT_NUMBER int,PLANT_NUMBER int)

关联:TABLE_HEAD“1到多个”TABLE_POINT“1到多个”TABLE_PLANT

正如您所看到的,GRID_ID,SERIALNUMBER,YEAR of TABLE_HEAD应该映射到GRID_ID,SERIALNUMBER,YEAR of TABLE_POINT

GRID_ID,SERIALNUMBER,TABLE_POINT的年份应该映射到GRID_ID,SERIALNUMBER,YEAR,POINT_NUMBER

我的第一种方法是使用GRID_ID,SERIALNUMBER,YEAR分组为PK,但这将违反条件。

所以唯一的方法是使用Sync_ID作为PK。但如何如上所述映射其他字段呢?我可以只映射PK_Columns吗?

希望你有想法帮助我。其他方法也受到欢迎。 最好的问候!

1 个答案:

答案 0 :(得分:0)

其他方法是创建正确的数据库结构!

你有Sync_ID作为PK,所以在依赖实体中使用它作为FK,而不是做你所描述的混乱。这与正确的数据库架构没有任何共同之处。关系数据库的要点是最小化数据的双重性,但是几乎将所有数据从第一个表复制到所有依赖表。此外:

  • 如果TABLE_HEAD没有GRID_IDSERIALNUMBERYEAR的唯一索引,则它不能是一对多关系的主要实体
  • 即使它具有唯一索引也没关系,因为EF不支持唯一索引,因此它必须是作为关联主体实体参与的主键

您应该阅读有关数据库规范化的内容。