Dot-Net
為什麼 EF 4 不為具有唯一索引的列的 FK 關係生成關聯?
我遇到了 Entity Framework 4.0 不生成與由具有唯一索引的表支持的實體的關聯的情況,我想知道為什麼。
基本設置是這樣的:假設我在 SQL Server 2008 R2 中有兩個表和一個外鍵關係:
CREATE TABLE [dbo].[User]( [Id] [int] IDENTITY(1,1) NOT NULL, [GroupId] [int] NULL, CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[Group]( [Id] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_Group] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] ALTER TABLE [dbo].[User] WITH CHECK ADD CONSTRAINT [FK_User_Group] FOREIGN KEY([GroupId]) REFERENCES [dbo].[Group] ([Id])此外,假設存在以下索引:
CREATE NONCLUSTERED INDEX [IX_Group] ON [dbo].[Group] ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]如果我告訴 Visual Studio 2010 中的設計人員生成一個 ADO.NET 實體數據模型,我會得到一個具有兩個類的模型,並且
User具有一個名為. 這一切都很好。Group``User``Group現在,假設索引看起來像這樣:
CREATE UNIQUE NONCLUSTERED INDEX [IX_Group] ON [dbo].[Group] ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]也就是說,我唯一做的就是使索引成為唯一索引。完成此操作後,當我告訴 Visual Studio 的設計器生成實體模型時,使用者和組之間的關聯不會出現,並且
User沒有導航屬性。檢查生成的 EDMX 文件顯示儲存模型根本沒有關聯集。誰能解釋這是為什麼?為什麼唯一索引會阻止 EF 對關係進行建模?
謝謝你。
唯一索引允許 1 個 NULL 值,主鍵不允許 NULLS。當沒有任何東西等於 NULL 甚至不等於另一個 NULL 時,你將如何匹配 NULL
我也有同樣的問題。但是,就我而言,我嘗試連結的列不是主鍵。因此,它不會起作用。EDMX 文件不會編譯,說它必須連結到主鍵。這是有道理的。我遇到這個問題的唯一原因是我正在處理一個設計不佳的遺留數據庫。
但是,在您的情況下,您正在標識列上創建唯一索引。為什麼?無論如何,標識列都保證是唯一的。此外,它是您的主鍵,預設情況下會有一個索引。
我發現這個連結解釋了 EF 目前不支持與唯一約束的關聯,但是,看起來他們正在為未來的版本計劃它。