簡體   English   中英

實體框架 6 表名作為 FK 值

[英]Entity Framework 6 tablename as FK value

我有以下兩個數據庫表。 “屬性”表的目的是讓用戶能夠在運行時為現有表引入更多字段。 因此,所有表的所有用戶定義屬性都將存儲在一個“屬性”表中。 對數據庫沒有物理約束。 我的問題是如何在 Entity Framework 6 中建立這兩個表之間的關聯?

在此處輸入圖片說明

在此處輸入圖片說明

重新設計您的數據庫,以在用戶定義的屬性持有者(例如學校)和屬性本身之間建立一個表:

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 實體(或通過AttributeOwnersAttributes具有 FK 關系的任何其他實體)上的 Attributes 集合。

有一個小的設計錯誤,如果您有兩個表SchoolsColleges ,它們都鏈接到AttributeOwners那么它們都可以指向相同的AttributeOwners.Id值,因此它們將共享用戶定義的屬性值。 您可以通過使用檢查其他表(通過 UDF)的CHECK CONSTRAINT來緩解這種情況,但是只要將新表添加到您的設計中,就需要更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM