2012-04-13 11 views
2

Ich verwende EF 5 mit Migrationen und Code zuerst. Alles funktioniert ziemlich gut, aber es gibt einige Probleme/Fragen, die ich lösen möchte.Entity Framework 5 Enum Naming

Beginnen wir mit einem einfachen Beispiel. Sagen wir, ich habe eine Benutzertabelle und eine Benutzertyptabelle. Die Benutzertyptabelle ist eine Enum/Lookup-Tabelle in meiner App. Daher hat die Benutzertabelle eine UserTypeId-Spalte und einen Fremdschlüsselref usw. für UserType. In meinem poco habe ich eine Eigenschaft namens UserType, die den Enum-Typ hat.

Um die Anfangswerte der UserType-Tabelle hinzuzufügen (oder Werte später hinzuzufügen/zu ändern) und die Tabelle im initialen Migrator usw. zu erstellen, benötige ich eine UserType-Tabelle poco, um die tatsächliche Tabelle in der Datenbank darzustellen und zu verwenden die Kartendateien. Ich habe die UserType-Eigenschaft in der Benutzer-POKO UserTypeId im UserType-POKO zugeordnet. So jetzt habe ich ein poco für Code zuerst/migrations/context mapping etc und ich habe eine enum. Kann nicht den gleichen Namen für beide haben, also habe ich ein poco namens UserType und etwas anderes für die enum oder habe das poco für UserType UserTypeTable oder so etwas?

Wichtiger jedoch, fehlt mir ein Schlüsselelement in wie Code zuerst funktioniert? Ich habe das obige Beispiel ausprobiert, Add-Migration ausgeführt und die Lookup-Tabelle für die Enumeration nicht hinzugefügt.

+0

möchte vielleicht Klingt wie Sie etwas Ähnliches wie http://stackoverflow.com/q/11167665/10245 wollen –

Antwort

0

Meiner Erfahrung nach ist das Enum für Ihren Code wichtiger als die Lookup-Klasse, also geben Sie ihm den richtigen Namen. Ich würde auch die Suche Klasse isoliert ohne Beziehung zum Benutzer in meinem Modell halten. Wenn es wirklich nur zum Nachschlagen ist, dann brauchen Sie es nicht von Ihrem Benutzer hängen. Ihre Enum mit einer DescriptionAttribute kann die Suche in Ihrem Code erfüllen.

UserTypeLookup könnte ein guter Name sein, da das klingt wie, wofür Sie es verwenden werden. Dann können Sie diese Klasse verwenden, um die Tabelle zu verwalten.

Sie den Plan nicht die Beziehung zwischen UserTypeLookup und User in ef Code zuerst, ist das einzige, was Angenommen, Sie benötigen, sollten manuell die foriegn Schlüsselbeziehung zwischen der UserType Spalte in der Tabelle User und die PK in der DB erstellen aus die UserTypeLookup Tabelle. UserTypeLookup kann immer noch eine Entität sein, und EF sollte immer noch die DB-Tabelle dafür generieren, auch wenn Sie keine Beziehungen dafür einrichten.

+0

Einverstanden. Ich habe meine Lookup-Klasse tatsächlich so benannt, wie Sie gesagt haben. Das Problem, das ich jetzt durcharbeiten möchte, ist folgendes: Da ich poco so eingestellt habe, dass das Enum und der Map-Code das Lookup verwenden, sieht der Migrator das als Änderung und versucht, die Datenbank durch Hinzufügen einer Spalte namens "UserTypeLookup" zu ändern ". Ich erwarte, dass die Suche in der Datenbank funktioniert, damit ich die Tabelle usw. im Migrator-Code manuell erstellen muss. –

2

Wenn ich richtig Ihre Fragen verstanden und was Sie verwirrt sind,

Enums support has nothing to do with lookup tables on the Db side. 

Aufzählungen sind einfach so dass Sie Objekte in Ihren Klassen haben, die Aufzählungen und das heißt übersetzt in ‚int'- sind s im Grunde genommen - also ist da nicht viel anderes drin.

Für weitere Informationen, die Sie Blick auf dieses Video von Julie Lerman on Enum-s support

hoffe, das hilft

+0

Ich glaube, er sagt, dass er ein Feld UserTypeId hat, das er sowohl einem Enum (sagen wir 'UserTypeEnum') als auch einem Fremdschlüssel für seine Lookup-Tabelle zuordnen möchte (sagen wir' UserTypeClass'). –

+0

Ja Brian, das ist richtig.Ich versuche, die richtige Kombination zu finden, um den Code zuerst sauber zu machen (unter Verwendung der Aufzählungszeichen), aber immer noch mit der Nachschlagetabelle in der Datenbank zu verbinden. Ich weiß, dass die Enum-Unterstützung nur auf der Codepage ist, aber in der Praxis möchten Sie immer noch eine Nachschlagetabelle, um gültige Werte in der DB sicherzustellen. Derzeit haben wir hier einen Generator, der die Enumeration aus der Nachschlagetabelle generiert (einschließlich EnumMember-Attributen mit der Beschreibung). Wenn Sie die DB zuerst mit einem Modell verwenden, können Sie die Spalte auf den Typ enum setzen und die Enumeration für Sie aus der Datenbank erstellen. –

+0

@TyrelVanNiekerk Ich verstehe - ich denke, Sie können beide zusammenarbeiten (es ist ähnlich wie benutzerdefinierte Zuordnung FK-s usw.). Aber könntest du einfach angeben, was genau du erreichen willst (zB enum + ID, das ist FK, um Tabelle und Klasse nachzuschlagen - aber dann musst du, denke ich, auch eine Nachschlageklasse haben, abgesehen von der Enum - oder du einfach "unsichtbare" Lookup-Tabelle usw.) und ich werde die Frage mit einer spezifischen Lösung bearbeiten. – NSGaga

Verwandte Themen