【问题标题】:mapping Properties in Entity Framework without PK?没有PK的实体框架中的映射属性?
【发布时间】:2011-07-21 12:37:22
【问题描述】:

我尝试创建一个包含 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

如您所见,TABLE_HEAD 的 GRID_ID、SERIALNUMBER、YEAR 应映射到 TABLE_POINT 的 GRID_ID、SERIALNUMBER、YEAR

并且TABLE_POINT的GRID_ID, SERIALNUMBER, YEAR应该映射到GRID_ID, SERIALNUMBER, YEAR,POINT_NUMBER

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    您将Sync_ID 用作PK,因此将其用作依赖实体中的FK,而不是做您所描述的混乱。这与正确的数据库架构没有任何共同之处。关系数据库的重点是最大限度地减少数据重复性,但是您将几乎所有数据从第一个表复制到所有依赖表。此外:

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

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

    【讨论】:

    • 感谢您的回复,我知道这是一团糟的数据库结构,但这不是我的选择:-)
    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多