Laden...

[erledigt] Entity Framework: ObjectSet selbst erstellen

Erstellt von m.grauber vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.991 Views
M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren
[erledigt] Entity Framework: ObjectSet selbst erstellen

Hallo,

ich arbeite mit dem EF und möchte ein bestimmtes ObjectSet (oder ObjectQuery) ersteinmal ohne Datenbank-Hintergrund erstellen - und später evtl. auf Datenbank-Tabellen umstellen. Leider erhalte ich einen Fehler:


// Meine Klasse ist so definiert:
public class MeineKlasse
{
  public MeineKlasse()
  {
    String Name {get; set;}
    int Id {get; set;}
  }
}

Leider bekomme ich beim Benutzen der Klasse in einem ObjectSet einen Fehler X(:


public ObjectSet<MeineKlasse> MeinObjectSet;  // geht

MeineKlasse _meineKlasse = new MeineKlasse();
_meineKlasse.Name="Test";
_meineKlasse.Id="1";

MeinObjectSet.AddObject(_meineKlasse);  // Fehler erst zur Laufzeit: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

Objectset ist lt. Dokumentation vom Typ (TEntity). Nur wie kann ich eine "Entity" so einfach erstellen, dass ich diese hier nutzen kann? Aus der MSDN werde ich leider nicht schlau...

Vielen Dank!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

6.862 Beiträge seit 2003
vor 13 Jahren

Baka wa shinanakya naoranai.

Mein XING Profil.

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo Talla,

Danke für den Hinweis. Genau das ist jedoch mein Problem:


public ObjectSet<MeineKlasse> MeinObjectSet;  // geht und führt aber zum Fehler

Um den Fehler zu vermeiden müsste ich das ObjectSet so definieren:


public ObjectSet<MeineKlasse> MeinObjectSet = new ObjectSet<MeineKlasse>();

Da kommt aber beim ObjectSet ein Fehler "Für den Typ "System.Data.Objects.ObjectSet<TEntity>" sind keine Konstruktoren definiert.

Scheinbar kann ich nicht so einfach ein "eigenes" Objectset ohne Datenbankhintergrund definieren. Ich hätte gerne eine Klasse und eine Collection, die ähnlich aufgebaut ist wie die anderen ObjectSets aus der Datenbank. Erst bei Bedarf möchte ich dann diese Daten in den SQL-Server ausgliedern.

Bis dahin möchte ich mit meinem "lokalen Objectset" arbeiten. (Die wenigen Daten darin sind immer gleich und müssen nicht geändert werden).

Wie kann ich dieses ObjectSet trotzdem erstellen?

Vielen Dank!

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

F
10.010 Beiträge seit 2004
vor 13 Jahren

Dir ist anscheinend nicht bewusst was Du da wirklich tust, oder?

EF ist ein ORMapper, also ein Tool das Relationale Datenbanken und Programminterne Objekte aufeinader Mapped.
Wenn du mit normalen Objekten arbeiten willst, dann tu das, und benutze ggf zur abfrage LinQ2Object.
Willst du Listen Benutzen, dann benutze sie.

Erkläre doch mal lieber was Du wirklich vor hast.

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo FZelle,

Dir ist anscheinend nicht bewusst was Du da wirklich tust, oder?

--> Im Ansatz ist es mir schon bewußt, dass ich dadurch ein weitaus komplexeres Objekt benutze, als ich es eigentlich benötige und dass natürlich die Update-Funktionalität etc. von mir an dieser Stelle (derzeit) niemals gebraucht wird.

Ich möchte momentan einige kleinere Tabellen noch nicht auf dem SQL-Server anlegen und trotzdem bereits damit arbeiten können. Später sollen diese Tabellen auf dem Server angelegt werden. Damit dann bereits programmweit alles so weiterarbeiten kann wie bisher, würde ich diese Daten bereits jetzt vom (später) richtigen Typ anlegen wollen.

Aus Deiner Antwort schließe ich, dass ich das auf keinen Fall machen sollte und dann erst einmal mit normalen Collections und Klassen arbeiten sollte?

Ich bin natürlich belehrbar =)

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]

F
10.010 Beiträge seit 2004
vor 13 Jahren

Warum meinst du, das die Daten jetzt nicht aus einer DB kommen sollen, sondern erst später?

Aber dein Problem ist eher genereller Natur.
Du trennst die Schichten nicht sauber und deswegen hast du unnötigerweise Abhängigkeiten die nicht gut, bzw hinderlich sind.

  1. EF4 kann Poco's verarbeiten und damit auch ganz normale List<wasAuchImmer>().

  2. Erstelle dir für jede Problemdomain ein Repository, das zu einem Interface passt, das dir auch IQueryable<T> anbietet.
    Dann kannst du hier per LinQ drauf zugreifen.
    Ob sich dann hinter der konkreten Implementation eine List<xx> befindet oder eine EF Query ist dann erstmal egal.

M
m.grauber Themenstarter:in
343 Beiträge seit 2010
vor 13 Jahren

Hallo FZelle,

danke wiedereinmal für Deine Hilfe! 👍

Du trennst die Schichten nicht sauber und deswegen hast du unnötigerweise Abhängigkeiten die nicht gut, bzw hinderlich sind.

--> Da hast Du mich wieder einmal erwischt 😁 Werde ich mir später noch ansehen, versprochen!

Erstelle dir für jede Problemdomain ein Repository, das zu einem Interface passt, das dir auch IQueryable<T> anbietet. Dann kannst du hier per LinQ drauf zugreifen.

--> Danke!, so mache ich es jetzt auch: Ich nutze nun normale Listen und es klappt wie Du sagst trotzdem. Ich wollte es halt absolut identisch machen, aber das ist an dieser Stelle tatsächlich unpassend. Der Briefträger kommt auch nicht mit einem Container bei mir vorbei, obwohl dieser zum Transport bei Bahn, LKW und Schiff dient.

Grüße

Mfg
Michael

PS: Ich stelle nur Fragen, wenn ich in Büchern, im Web und in Foren nichts gefunden habe. Dumme Fragen bitte ich zu entschuldigen!

:] VISUAL STUDIO 2017 + .NET FRAMEWORK 4.5 + SQL-Server 2012 :]