Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von m.grauber
Thema: [erledigt] Entity Framework: Abfrage in eigener Collection speichern
Am im Forum: Datentechnologien

Hallo,

ich nutze SQL-Server 2000-2008, C#, VS 2010 und arbeite über das Entity Framework.

Ich möchte eine Abfrage in einer Collection speichern, die ich selbst erstellt habe.


ObjectQuery<Kunden> Kunden = EModell.Kunden;
var query =  from A in Kunden  select new { A.Name, A.ID };

public class oDisp    // Fehlt hier noch ein Interface?
{
  public string Name {get;set;}
  public int ID {get;set;}
  public oDisp  // Konstruktor ist doch da!
    {
       Name="";
       ID=0;
    }
}

// Hier tritt der Fehler auf: 
ObjectSet<oDisp> query2 = new ObjectSet<oDisp>(); // Fehler: "Für den Typ "System.Data.Objects.ObjectSet<TEntity>" sind keine Konstruktoren definiert."

query2=query  // Hier soll query in query2 abgelegt werden, weil ich zukünftig mit query2 weiterarbeiten will
oder:
query2 = (ObjectSet<oDisp>)query; // ist das notwendig?


DataGrid.ItemsSource=query   // Funktioniert Problemlos: Werte werden angezeigt
query.Dispose();                     // gibt es nicht - warum nur?

DataGrid.ItemsSource=query2  // Das möchte ich! - Wenn obiger Fehler weg ist

Ist ObjectSet<> überhaupt die richtige Wahl? Und was habe ich falsch gemacht?

Vielen Dank für Eure Hilfe!

Thema: [erledigt] EF - Entity Framework: Wie können die Entitätsfelder ihren Standardwert aus dem SQL-Se...
Am im Forum: Datentechnologien

Hallo dN!3L,

vielen Dank für die Antwort!

Die Felder sollen an anderen Programmstellen schon befüllt werden. (Kann man vielleicht mitteilen: Alles andere, was nicht explizit übergeben wurde = computed? oder gibt es in der Entität eine Möglichkeit wie "Entity.LoadDefaultValuesIfNull=true;" um die Defaultwerte zu laden?)

Im Konstruktor kann ich leider nicht die Standardwerte einsetzen, da ich ja den Desinger vom Entity Model genutzt habe, um die SQL-Tabellen als Entitäten darzustellen. Dort kann ich zwar sicher irgendwo in den Code gehen und die Standardwerte im Konstruktor manuell setzen. Das geht sogar im Designer:

Im Entitätsmodel kann ich die einzelnen Felder (Entitätstypen) mit einem Standardwert auch befüllen. Aber auch diese Änderungen gehen verloren, wenn ich das Entitätsmodell neu erzeuge.

Ich möchte aber bei Tabellenänderungen das Entity Model schnell neu aufbauen können: Alles markieren, löschen und dann neu erzeugen. Damit wären meine Änderungen überschrieben.

Vielleicht weiß jemand noch eine Lösung?

Danke

Thema: [erledigt] EF - Entity Framework: Wie können die Entitätsfelder ihren Standardwert aus dem SQL-Se...
Am im Forum: Datentechnologien

Hallo,

hat denn wirklich niemand eine Idee wie das geht?

Ich bin wirklich dankbar für jeden Tipp!

Thema: [erledigt] EF - Entity Framework: Wie können die Entitätsfelder ihren Standardwert aus dem SQL-Se...
Am im Forum: Datentechnologien

Liebe Experten,

Ich komme nicht mehr weiter: Per Entity Framework soll ein Datensatz auf den SQL-Server eingefügt werden, was nur dann fehlerfrei klappt, wenn alle Felder tatsächlich mit Werten belegt werden. (In der Datenbank sind alle Felder "Not Null" und haben einen Standardwert hinterlegt)

Im Entitätsmodell kann auch für jedes Feld unter Standardwert jeweils ein Standardwert hinterlegt werden. Damit würde das Problem nicht mehr auftreten.

Im Entitätsmodell sind bei den Feldern die Eigenschaften "NULL zulassen" "=False" und "Standardwert" "=(Keine"). Ändert man "Standardwert" auf den Standardwert, klappts wie gesagt. - Wie kann man das automatisiert für alle Tabellen und alle Felder tun?

Leider möchte ich diese Information nicht manuell im Entitätsmodell eintragen, da ich das Entity-Modell nach Änderungen an den SQL-Server-Tabellen lösche und immer neu erzeuge. Nach jeder Erzeugung müsste ich somit hunderte von Standardwerte eintragen.

Gibt es eine Einstellung beim Erstellen vom Entitätsmodell, die automatisch die Standardwerte vom SQL-Server übernimmt? Oder gibt es vielleicht eine Einstellung "Beim Speichern statt Null-Werten Standardwerte vom Server verwenden"?

SQL-Server 2000-2008
VS2010 C#, .NET 4

Danke!

Thema: Was ist besser: LINQ to SQL - Klasse oder ADO.NET Entity Data Model
Am im Forum: Datentechnologien

Hallo Gü,

danke für Deine schnelle Antwort! Ich hatte bereits gegoogled, aber das "versus" hats wirklich gebracht!

Somit habe ich mich nun mit EF beschäftigt und hoffe zukünftig nicht gleich wieder umsatteln zu müssen.

Ich versuche nun den Connection String nicht über die app.config (dort ausdokumentiert), sondern direkt im Code vor jeder Lese- oder Schreibaktion einzusetzen.

Ich hoffe, das es dann möglich ist, die Verbindung zu öffnen > Daten auszulesen + Verbindung sofort danach zu schließen (Werte sollen im WPF-Fenster weiterhin angezeigt werden aber Datenbank könnte jetzt theoretisch offline geschalten werden) > Verbindung wieder zu öffnen und die geänderten Daten z. B. per SaveChanges() in die Datenbank zu übernehmen + Verbindung sofort danach zu schließen.

Ich weiß nicht, ob es möglich ist, die Werte überhaupt nach dem "Verbindungsabbruch" zu ändern oder ob dann ein Fehler kommt? - Ich möchte die Verbindung trotzdem nicht offen lassen. Geht das?

Falls ja habe ich schon hier Probleme:

Leider klappt das nicht ganz - was ist daran falsch?:
EntityConnection conn = new EntityConnection("name=XYModel")
// hier gibt es umfangreiche Möglichkeiten mit using(EntityConnection XYModel = new EntityConnection(entityBuilder.ToString())) und einem anschließendem Block die aber bei mir auch nicht funktionieren

Hier möchte ich hin und folgende Zeilen klappen auch (bei Weg über app.config):
XYEntities dataEntities = new XYEntities();
ObjectQuery<Kunde> Adresse = dataEntities.Kunde;

Danach Verbindung schließen:
XYEntities.Connection.Close();
XYEntities.Connection.Dispose();

Nochmals tausend Dank!

Thema: Was ist besser: LINQ to SQL - Klasse oder ADO.NET Entity Data Model
Am im Forum: Datentechnologien

Liebe Experten,

ich habe mich soeben mit den LINQ to SQL - Klassen angefreundet (DBML-Dateien und grafischer Designer). Nun habe ich entdeckt, dass ein Zugriff über das ADO.NET Entity Data Model in ähnlicher Weise möglich ist. Beide arbeiten ja mit Entitäten.

- Wo ist denn der Unterschied zwischen beiden? (ich habe dazu nichts gefunden)
- Was ist zukunftssicherer?
- Was ist schneller?
- Was ist einfacher zu "handeln" (z. B. bei Änderungen der SQL-Datenbanken (z.B. Feldänderungen)
- Mit welchen der beiden Möglichkeiten arbeitet die Mehrheit der C# Entwickler (die eine der beiden Methoden einsetzen)?
- Am liebsten würde ich immer nur für den Abfragezeitraum die Verbindung aufbauen, abfragen und dann schließen. Auch bei Änderungen direkt vorher Verbindung öffnen, ändern und schließen. Die bei der letzten Verbindung eingelesenen Daten müssen auch nach dem Trennen der Verbindung und dem neuen Aufbauen der Verbindung z.B. per SubmitChanges geändert werden können.
- Die Verbindung (Connection) sollte auch optional per IP-Adresse (und notfalls übers Internet) möglich sein.

Genutzt werden soll alles mit:
- SQL-Server 2000-2008 bzw. SQL-Server Compact
- Netzwerkbetrieb mit bis zu 20 Arbeitsplätzen
- Programmierung unter VS 2010, C#, WPF, Nutzung von DataGrid und DataBinding

Danke vielmals!

Thema: [erledigt] MS-SQL-Select in ObservableCollection speichern
Am im Forum: Datentechnologien

Hallo FZelle und Kenchu,

in der Tat habt ihr beide Recht und ich finde es toll, das ich durch diese Antworten nun auf dem (hoffentlich) richtigen Weg bin!

Ich habe mir Linq2Sql angesehen und stelle fest, das es wirklich ein sehr brauchbarer und einfacher OR-Mapper ist, der mir auch sehr(!) viel Arbeit abnimmt. (NIH-Syndrom damit hoffentlich kuriert)

Ich weiß, ich setze mich nun bestimmt viel Kritik aus, aber ich möchte vorerst kein "echtes" Schichtenmodell und erst Recht kein MVVM-Modell nutzen. Ich möchte in einem Projekt die "Schichten" vorerst als einzelne Klassen modellieren, aber den Zugriff der Schichten untereinander nicht verweigern, um die Anwendung einfach zu halten. (KISS) So komme ich am Anfang vorerst am Weitesten.

Die Anwendung soll entweder auf einem Rechner oder von mehreren Clients in einem Netzwerk aus genutzt werden.

Linq2Sql wird in der untersten "Schicht" eingesetzt.

Noch eine letzte Frage zu Linq2Sql: Empfehlt ihr über "LINQ to SQL-Klassen" den "grafischen Designer" (mit .designer.cs-Datei) zu nutzen oder die Entity-Klassen selbst schreiben? (Habe ich auch bereits erfolgreich gemacht und ist für mich zur Zeit etwas übersichtlicher)

Vielen Dank

Thema: [erledigt] MS-SQL-Select in ObservableCollection speichern
Am im Forum: Datentechnologien

Hallo FZelle,

entschuldige bitte: ja, ich meinte die DataTable.

Ich möchte dass die Anwendung später auch noch dann erweiterbar und übersichtlich ist, wenn sie einmal sehr groß wird, ohne etwas umzuschreiben.

Folgendes mag ich an den vorhandenen OR-Mappern nicht:

- Es gibt eine Vielzahl davon und man weiß nicht, ob die Entwicklung daran später einmal eingestellt wird.

- Es können scheinbar nicht alle Sachen damit gemacht werden. Ich suche aber eine Möglichkeit, die mir später einmal alles erlaubt.

- Ich könnte später beim eigenen OR-Mapper meine eigenen Zugriffsmethoden wie gewünscht optimieren

Trotzdem sehe ich mir gerade auch Linq2Sql an, was scheinbar sehr viel einfacher ist. Wäre dies evtl. doch für mich sinnvollste Weg, den Du mir empfehlen würdest? (Auch wenn meine Anwendung später sehr wächst, ich evtl. einmal außer SQL-Server auch MySQL und Oracle einsetzen müsste?) Ich möchte dann gerne in der Datenzugriffsschicht einen Switch einbauen, der mir dann auch mit Linq2Sql je nach Datenbanksystem die richtigen Daten liefert.

Vielen Dank!

Thema: [erledigt] MS-SQL-Select in ObservableCollection speichern
Am im Forum: Datentechnologien

Hallo,

Danke vielmals für Deine Antwort! Inzwischen habe ich mich intensiv zu anderen ORMappern eingelesen und bin weiterhin in meinem Fall der Auffassung, den ORMapper selbst zu schreiben. Es gibt sicher viele unterschiedliche Meinungen dazu.

Nur ist es in diesem Fall angebracht, im Programm nicht mit RecordSets zu arbeiten und stattdessen besser eine ObservableCollection zu nutzen - oder gibt es eine "bessere" (einfacher/schnellere) Collection dafür?

Entscheide ich mich für Collections muss ich also scheinbar tatsächlich den Umweg über den Recordset gehen und von dort aus alle Daten in die Collection kopieren. (Das kostet auch Zeit).

Ich habe gehofft, es gibt einen direkte Methode, die Daten - ohne über den Recordset - direkt in die Collection zu kopieren.

Die Daten sollen in WPF dargestellt/editiert werden.

Vielen Dank!

Thema: [erledigt] MS-SQL-Select in ObservableCollection speichern
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <MS-SQL-Server 2000 - 2008>

Hallo,

ich bin ein Anfänger und habe bereits viel gesucht aber noch keine übergreifende Antwort auf meine Fragen gefunden:

Daten vom SQL-Server, SQL-Server-Compact und später vielleicht einmal MySQL oder eine andere Datenbank soll im WPF-Programm in eine Observable Collection gespeichert werden. (Lesen und zurückspeichern und an WPF binden)

1. Ist die Observable Collection zum aktuellen Zeitpunkt VS2008/2010 tatsächlich die empfehlenswerteste Collection (Performance, Möglichkeiten) und sollte man besser nicht mehr mit DataTables arbeiten? Gibt es evtl. eine bessere Collection? Ich möchte später so wenig wie möglich unterschiedliche Collections nutzen und es sollte eine sehr schnelle und einfache Möglichkeit sein.

2. Beim Füllen einer ObservableCollection stelle ich mich noch schlecht an: Ich hole mir die Daten zuerst mit einem SQLDataReader (und ExecuteReader und dann mit Read()) und füge dann die einzelnen Daten mit einer Schleife ein. Das ist bei großen Datenmengen sicher zu langsam. Gibt es hier eine Möglichkeit, die Werte direkt und auf einen Schlag in eine ObservableCollection einzufügen?

3. Ist es sinnvoll von allen auf dem SQL-Server existierenden SQL-Tabellen einzelne Klassen mit allen Feldern zu erstellen, die es auf dem SQL-Server gibt um diese Klasse dann für die ObservableCollection zu nehmen? Kann man sich diese Klassen nicht komfortabel und dynamisch beim Lesen vom SQL-Server selber erstellen lassen?

Vielen Dank!