2

我有以下两个数据库表。“属性”表的目的是为用户提供在运行时为现有表引入更多字段的能力。因此,所有表的所有用户定义属性都将存储在一个“属性”表中。对数据库没有物理限制。我的问题是如何在 Entity Framework 6 中的这两个表之间建立关联?

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

2

重新设计您的数据库,使其具有一个表,该表在用户定义的属性持有者(例如学校)和属性本身之间建立链接:

CREATE TABLE Schools (
    Id bigint IDENTITY(1,1) PRIMARY KEY NOT NULL,
    Name nvarchar(50) NOT NULL,
    AttributeOwnerId bigint -- This column should have both a FOREIGN KEY constraint on AttributeOwners.Id and a UNIQUE constraint (so no two schools can share the same user-defined attributes)
)

CREATE TABLE AttributeOwners (
    Id bigint IDENTITY(1,1) PRIMARY KEY NOT NULL
)

CREATE TABLE Attributes (
    Id bigint IDENTITY(1,1) PRIMARY KEY NOT NULL
    AttributeOwnerId bigint -- FOREIGN KEY constraint on AttributeOwners.Id
    Name nvarchar(50),
    Value nvarchar(50)
)

通过这种设计,您现在可以拥有用户定义字段的数据库级引用完整性。Attributes实体框架会将其公开为每个 School 实体(或与via具有 FK 关系的任何其他实体AttributeOwners)上的 Attributes 集合。

有一个小的设计错误在于,如果您有两个表Schools并且Colleges都链接到,AttributeOwners那么它们都可以指向相同的AttributeOwners.Id值,因此它们将共享用户定义的属性值。您可以通过使用CHECK CONSTRAINT检查其他表(通过 UDF)来缓解这种情况,但是每当将新表添加到您的设计中时,都需要更新它。

于 2015-10-09T18:30:11.563 回答