Designfrage
-
y-vonne schrieb:
Nun würde ich mir gerne einfach noch merken welches das aktive Rezept eines Profils ist.
Ich würde in diesem Fall wohl einfach eine RezeptId in die Profiltabelle packen.
P.S: @LOLAlter: Versuch es mal mit Deutsch, das können mehr Leute verstehen.
-
Obwohl dann das Argument wohl immer noch gilt: Dass ich dann auch immer die Profil Tabelle anfassen muss. Obwohl diese isch eigentlich nicht verändert.
Hier würde dann wohl doch auch die dritte Tabelle einen Sinn machen.
Wie ich das aber mit dem Constraint im EntityFramework von .Net hinbekomme weiß ich immer noch nicht
-
y-vonne schrieb:
Obwohl dann das Argument wohl immer noch gilt: Dass ich dann auch immer die Profil Tabelle anfassen muss. Obwohl diese isch eigentlich nicht verändert.
Wenn du dir selbst Argumente für die dritte Tabelle gibst, dann brauchst du doch auch nicht zu fragen ;).
y-vonne schrieb:
Wie ich das aber mit dem Constraint im EntityFramework von .Net hinbekomme weiß ich immer noch nicht
Sag bitte zum EntityFramework immer noch die Version (und ggf. den Ansatz an) da, soviel ich mich erinnere, du aus irgendwelchen Gründen doch kein aktuelles .Net verwendest. Je nach Ansatz ist es ohnehin kein Problem (z.B. Wenn es aus dem DB-Model generiert wird). Unter Umständen lässt sich aber in die DB-Generierung (bei einem anderen Ansatz) eingreifen und z.B. noch die Constraint über ein SQL-Befehl nachtragen.
-
asc schrieb:
P.S: @LOLAlter: Versuch es mal mit Deutsch, das können mehr Leute verstehen.
Bitte teile mir doch mit, wo genau in meinen Erklärungen (zu denen NICHT die trollcharakteristischen, aber vom Inhalt jedoch klar abgrenzbaren LOL-Phrasen gehören!) eine unverständliche Erklärung zu finden ist.
-
Wenn du dir selbst Argumente für die dritte Tabelle gibst, dann brauchst du doch auch nicht zu fragen
Das Argument ist mir erst nachdem du die Antwort gegeben hast wieder eingefallen.
Sag bitte zum EntityFramework immer noch die Version
Verwende die .Net Version 3.5 und bin somit auf das Entity Framework 1.0 festgelegt.
(und ggf. den Ansatz an)
Modell zuerst. Also ich generiere alles aus dem Designer von Visual Studio.
-
Schau mal ob das folgende Vorgehen schon im EF 1.0 klappt:
http://www.develop-one.net/blog/2011/06/29/EntityFrameworkModelFirstOnetoOneRelationship.aspx(Es geht hier ja im wesentlichen um Foreign Key-Constraints).
-
Ja das geht. Klar. Das mache ich ja auch die ganze Zeit.
Aber wie löst das mein Problem. Verstehe da wohl noch was nicht ganz.
Ich habe nun eine dritte bzw. vierte Tabelle mit dem Namen "ActivRecipe" gemacht. Mit welcher Tabelle verbinde ich diese nun?
Tabelle
1. Profil
2. Rezept
3. ProfilRezeptso dass ich hier nun nur ein jeweils 1 Profil mit einem Rezept anlegen kann. Das aber auch in der Liste ProfileRecipe vorhanden ist.
-
y-vonne schrieb:
so dass ich hier nun nur ein jeweils 1 Profil mit einem Rezept anlegen kann. Das aber auch in der Liste ProfileRecipe vorhanden ist.
Schau doch einfach mal nach auf welche Tabellen du für deinen Anwendungsfall verweisen musst. Wenn ich dies Richtig verstehe ist dies einmal das Profil, und zum anderen das Profilrezept (Da es ja in diesen enthalten sein muss).
Also sind 2 Foreignkeys sinnvoll: einmal zum Profil, und einmal zum Profilrezept. Zum anderen kann der erstere Foreignkey auch gleichzeitig als Primärschlüssel verwendet werden, da ja nur ein Eintrag je Profil zulässig sein soll.
-
Schau doch einfach mal nach auf welche Tabellen du für deinen Anwendungsfall verweisen musst
?
Na toll. Das war ja die Frage. Wenn ich einfach nachschauen müsste hätte ich nicht gefragt.Aber so einfach wie du das sagst geht das nicht. Hast du schon mal was mit dem EF gemacht.
Also
Habe nun folgende Tabellen
Profile Key: ProfileID
Recipe Key: RecipeName
ProfileRecipe Key: Profile_ID -> Bezug zu Profile Key ID
Recipe_Name -> Bezug zu Recipe Key NameActiveRecipe Key Profile_ID -> bezug zu Profile Key ID
Recipe_Name ist nicht key. Profile_ID ist eindeutig.Also die Frage. Worauf hat nun ActiveRecipe noch eine Beziehung und wie?
kann mit Recipe_Name keine Beziehung zu Tabelle "ProfileRecipe" Key "Name" machen da dies kein Schlüssel ist. Desweiteren wenn ich einen Bezug zu ProfileRecipe und zu Profile mache, haben ich einen doppelten Bezug zu ProfileID.
-
y-vonne schrieb:
Aber so einfach wie du das sagst geht das nicht. Hast du schon mal was mit dem EF gemacht.
Ich habe bereits mit EF gearbeitet, aber weder mit Model First, noch mit EF 1.0 (Vorwiegend 4.3.1 und Code First).
Willst du wirklich einen String als Schlüssel verwenden? Ich hätte hier die Id vom ProfilRezept eingetragen, falls noch nicht vorhanden würde ich schauen ob man hier noch ein Identity-Feld eintragen kann.
ODER: Verwende den Primärschlüssel vom Rezept, und stelle über die Programmlogik sicher, das dies ein ProfilRezept ist.
-
Willst du wirklich einen String als Schlüssel verwenden?
Jo muss sein.
Kannst du mir sagen wie man dann das im Management Studio macht. Also den Constraint. Dann kann ich mal aus der Datenbank mein Model generieren. Dann sehe ich wie das dort sein muss.
-
kann mit Recipe_Name keine Beziehung zu Tabelle "ProfileRecipe" Key "Name" machen da dies kein Schlüssel ist
Denke das ist das Hauptproblem. Habe nun zuerst mal die Tabelle in der Datenbank erstellt. Und dann daraus das Modell aktualisiert und bekomm dann folgende Fehlermeldung:
Beziehung 'FK_ActiveRecipes_ProfileRecipes' verwendet das Set der Fremdschlüssel '{Profile_ID, Recipe_Name}', die teilweise im Primärschlüsselset '{Profile_ID}' von Tabelle 'ActiveRecipes' enthalten sind. Das Fremdschlüsselset muss entweder vollständig im Primärschlüsselset enthalten oder vollständig nicht enthalten sein, damit eine Zuordnung zu einem Modell möglich ist.
Es wird dann wohl nur so gehen wie du asc schreibst.
Entweder noch eine ID für ProfilRezept einfügen. Wofür es andere gründe gibt warum ich das nicht möchte.
Darum nehme ich halt dann den zweiten Lösungsvorschlag.
Verwende den Primärschlüssel vom Rezept, und stelle über die Programmlogik sicher, das dies ein ProfilRezept ist.
Danke mal an alle!