[英]Entity Framework 6 tablename as FK value
重新设计您的数据库,以在用户定义的属性持有者(例如学校)和属性本身之间建立一个表:
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)
)
通过这种设计,您现在可以拥有用户定义字段的数据库级参照完整性。 实体框架将其公开为每个 School 实体(或通过AttributeOwners
与Attributes
具有 FK 关系的任何其他实体)上的 Attributes 集合。
有一个小的设计错误,如果您有两个表Schools
和Colleges
,它们都链接到AttributeOwners
那么它们都可以指向相同的AttributeOwners.Id
值,因此它们将共享用户定义的属性值。 您可以通过使用检查其他表(通过 UDF)的CHECK CONSTRAINT
来缓解这种情况,但是只要将新表添加到您的设计中,就需要更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.