Ich habe in einem Szenario, in dem Entity Framework 4.0 keine Zuordnung zu einer Entität erstellt, die von einer Tabelle mit einem eindeutigen Index generiert wird, und ich frage mich, warum.Warum erzeugt EF 4 keine Assoziation für eine FK-Beziehung zu einer Spalte mit einem eindeutigen Index?
Die Grundeinstellung ist dies: Sagen wir, ich habe zwei Tabellen in SQL Server 2008 R2 und ein Fremdschlüssel Beziehung:
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])
Darüber hinaus ist der folgende Index annehmen vorhanden:
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]
Wenn ich den Designer in Visual Studio 2010 anrufe, ein ADO.NET-Entitätsdatenmodell zu generieren, erhalte ich ein Modell mit zwei Klassen User
und Group
, User
mit einer Navigationseigenschaft namens Group
. Das ist alles in Ordnung und gut.
Nun lassen Sie uns stattdessen sagen, dass der Index sah wie folgt aus:
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]
Das heißt, die nur, was ich getan habe, ist der Index ein eindeutiger Index zu machen. Wenn ich dem Visual Studio-Designer sage, dass er ein Entitätsmodell generieren soll, wird die Zuordnung zwischen Benutzern und Gruppen nicht angezeigt, und die User
hat keine Navigationseigenschaften. Die Überprüfung der generierten EDMX-Datei zeigt, dass das Speichermodell überhaupt kein AssociationSet hat.
Kann jemand erklären, warum das ist? Warum verhindert der eindeutige Index, dass EF die Beziehung modelliert?
Vielen Dank.
Hmm, vielleicht haben Sie recht, aber Linq2SQL dieses Szenario umgehen kann. Außerdem kann ich passende AssociationSets etc. in der EDMX per Hand hinzufügen und es wird gut funktionieren, so dass ich immer noch nicht verstehe, warum EF aufgibt. – Rune
thnaks man viel, ich verschwendete mehr als 1 Stunde zu untersuchen, warum Navigationseigenschaften nicht zuordnen, hat Ihre Antwort mir geholfen. Nochmals vielen Dank –