myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Datentechnologien » EF Code First - Wo erzeugt man ein Instanz eines Navigationproperties?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

EF Code First - Wo erzeugt man ein Instanz eines Navigationproperties?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
SharpDeny
myCSharp.de-Mitglied

Dabei seit: 09.08.2016
Beiträge: 5


SharpDeny ist offline

EF Code First - Wo erzeugt man ein Instanz eines Navigationproperties?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo liebe Community,

ich wollte einmal fragen, wie man es richtig macht... und zwar nehmen wir folgendes Beispiel:

C#-Code:
public class Details
{
    public virtual Int32 ID { get; set; }

    public virtual String A { get; set; }
    public virtual String B { get; set; }
    public virtual String C { get; set; }
}

public class User
{
    public User()
    {
        MyDetails = new Details();
    }

    public virtual Int32 ID { get; set; }

    public virtual Details MyDetails { get; set; }
}

oder

C#-Code:
public class User
{
    public virtual Int32 ID { get; set; }

    Details _MyDetails;
    public virtual Details MyDetails
    {
        get{ return _MyDetails ?? (_MyDetails = new Details()); }
        set{ _MyDetails = value; }
    }
}

Oder gar komplett anders?

Grüße
SharpDeny
Neuer Beitrag 12.08.2019 11:33 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.919
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

es gibt kein ASP.NET Code First - Du wirst wohl Entity Framework Code First meinen; also Datenbankschema via Code.
Habe daher auch den Titel angepasst.

Prinzipiell sieht das nicht korrekt aus. Nur Navigation Properties sind virtual.
Die Klasse sollte auch eher UserEntity statt User heissen, da es ja nur eine Datendarstellung ist und kein Business Modell.

Mach einfach mal nen Tutorial durch; da lernst am meisten.
 https://www.entityframeworktutorial.net

Ob man User Details wirklich in eine extra Entität packt: kommt drauf an.
Es gibt auch keine pauschale Vorschrift, wo man Instanzen erzeugt; das kommt auf die Logik an.
Neuer Beitrag 12.08.2019 11:41 Beiträge des Benutzers | zu Buddylist hinzufügen
SharpDeny
myCSharp.de-Mitglied

Dabei seit: 09.08.2016
Beiträge: 5

Themenstarter Thema begonnen von SharpDeny

SharpDeny ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von Abt:
Du wirst wohl Entity Framework Code First meinen; also Datenbankschema via Code.

Dankeschön, genau das meinte ich - Allerdings habe ich

Zitat von Abt:
Prinzipiell sieht das nicht korrekt aus. Nur Navigation Properties sind virtual.
Die Klasse sollte auch eher UserEntity statt User heissen, da es ja nur eine Datendarstellung ist und kein Business Modell.

Die Namensgebung habe ich bei diesem Beispiel jetzt nicht beachtet - sorry.
Das virtual benutze ich, da ich diese  Libary benutze.
Aufgrund des Original-Properties.

Zitat von Abt:
Mach einfach mal nen Tutorial durch; da lernst am meisten.
 https://www.entityframeworktutorial.net

Das habe ich mir die Tage bereits angeschaut gehabt :) - Allerdings habe ich hierzu nichts finden können.

Zitat von Abt:
Ob man User Details wirklich in eine extra Entität packt: kommt drauf an

Ob es an diesem Beispiel Sinn macht oder nicht sei mal dahingestellt. Mir geht es primär darum, dass das Objekt immer der Datenbank angelegt wird bzw. nicht doppelt erzeugt wird und wieder geladen werden kann, sofern es vorhanden ist.


Vielen Dank für deine Hilfestellung

Grüße
SharpDeny
Neuer Beitrag 12.08.2019 14:18 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.919
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von SharpDeny:
Mir geht es primär darum, dass das Objekt immer der Datenbank angelegt wird bzw. nicht doppelt erzeugt wird und wieder geladen werden kann, sofern es vorhanden ist.

Eigentlich würde man es vermeiden, dass man 1:1 Entitäten so erzeugt, dass sie pflichtmäig da sind.
Da würde man es lieber in eine Entität packen und beim Lesen mit Projektionen arbeiten.

So wirst Du beim Lesen immer ein Join brauchen, was prinzipiell in Sachen Performance nicht gut ist.
Aber wie gesagt: da gibt es keine pauschale Antwort für.

C#-Code:
Details _MyDetails;
    public virtual Details MyDetails
    {
        get{ return _MyDetails ?? (_MyDetails = new Details()); }
        set{ _MyDetails = value; }
    }

Würde man aber so oder so nicht machen.
Wenn Du sagst, dass Details immer ezeugt werden, kann es hier prinzipiell nicht zu einem Null kommen - wenn doch ist in Summe Deiner Beschreibung ein Programmierfehler.
Neuer Beitrag 12.08.2019 14:27 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 22.08.2019 16:08