2009-08-05 25 views
21

Ich habe eine Ansicht in meiner Datenbank erstellt, die ich in mein Entitätsmodell aufnehmen möchte. Wenn ich jedoch versuche, das Entitätsmodell über VS 2008 zu aktualisieren, informiert mich eine Warnmeldung, dass die TABELLE ODER VIEW, die ich hinzufügen möchte, keinen Primärschlüssel hat.Ansichten und Entity Framework

Es scheint, dass ein Schlüsselfeld vorhanden sein muss, um dem Modell eine Ansicht hinzuzufügen. Wie kann ich diese Ansicht zu meinem Modell hinzufügen, wenn Ansichten kein Schlüsselfeld haben dürfen, zumindest in Firebird, welches der DBMRS ist, den ich benutze.

Irgendeine Idee, wie man das löst?

+0

Hier ist eine Visual Studio-Erweiterung, die alles für Sie erledigt, lesen Sie diesen Beitrag: [Frustriert durch fehlende Unterstützung für SQL-Views in ADO.NET Entity-Framework Designer?] (Http://blogs.microsoft. co.il/blogs/shimmy/archive/2010/09/03/frustrated-by-lack-of-support-for-sql-views-in-ado-net-entity-framework-designer.aspx) – Shimmy

+2

Dieser Beitrag kann hilfreich sein: [http://smehrrozalam.wordpress.com/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables/](http://smehrrozalam.wordpress. com/2009/08/12/entity-framework-creating-a-model-using-views-statt-von-tables /) –

Antwort

10

Es gibt eine große Antwort auf diese Frage hier: Entity Framework and SQL Server View (siehe akzeptierte Antwort. https://stackoverflow.com/a/2715299/53510)

EF folgert eine PK für Ansichten von allen Nicht-Nullable-Felder zu kombinieren. Sie können ISNULL und NULLIF verwenden, um die NULL-Werte von View-Spalten zu manipulieren, wodurch EF gezwungen wird, das gewünschte PK auszuwählen.

+4

Wenn Sie ISNULL oder NULLIF verwenden, werden die Felder schreibgeschützt und damit die Ansicht eine schreibgeschützte Ansicht zum größten Teil. Das ist nur in manchen Situationen nützlich. –

+0

Hat bei EF 5.0 Version nicht funktioniert. – Dave

0

Es gibt keine Schlüssel in Firebird Ansichten. Setzen Sie stattdessen ein (oder mehr) Feld als ‚nicht null‘ mit dem folgenden Befehl:

update RDB$RELATION_FIELDS set RDB$NULL_FLAG = 1 where (RDB$FIELD_NAME = 'A_FIELD') and (RDB$RELATION_NAME = 'A_VIEW') 

dann die Datenbank in Entity Framework erneut importieren.