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