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: C# Anwendung zum Fernsteuern von Office (Word/Excel/...)
Am im Forum: Office-Technologien

Hallo Abt und Alf!

Danke nochmals für die guten Informationen und auch den Link zum Artikel! Habe inzwischen viel mit dem Latebinding gemacht und werde auch aus diesem Grund erst einmal dabei bleiben.

Ich lasse den Fall erst einmal offen, weil sich evtl. ein kleines Problem abzeichnet.

Schöne Grüße!

Thema: C# Anwendung zum Fernsteuern von Office (Word/Excel/...)
Am im Forum: Office-Technologien

Dankeschön für die so zahlreichen Antworten!

Ich habe mich nun für das Late Binding entschieden, da ich nicht schon wieder ein Fremdtool nutzen möchte.

Hier aber noch einige Fragen, die evtl. jemand beantworten kann:

• Was ist, wenn die eigene C# Anwendung auf einem Windows-Tablet (mit Tastatur) installiert wird und dort nur das „Outlook RT“ installiert wurde.
-> Funktioniert die Automation per Late Binding dann trotzdem? - Ich habe leider kein Tablet zum Testen.

- Wenn die eigene C# Anwendung als 32bit kompiliert wird, sollte Office 32 Bit unterstützt werden, wenn sie 64bit kompiliert wird, sollte auch das Office 64 Bit unterstützt werden. Alles am besten in einem einzigen Code. Der Kunde setzt dann je nach dem entweder die 32 Bit oder die 64 Bit Version ein.
-> Ich habe gerade auf dem Entwicklungsrechner nur ein Office32-Bit installiert. Ich müsste demnach die Methoden noch für 64 Bit anpassen?

- Mit einer anderen Entwicklungsumgebung hatte ich bei der Automation Probleme (allerdings erst ab Office 2010; alle Office-Vorversionen funktionieren einwandfrei), wenn ich das Word-Dokument per Automation geöffnet habe, es vom Benutzer bearbeitet wurde und ich die Verbindung zum Word bis zum Schließen gehalten habe, um nach dem Schließen von Word wieder in mein Programm zurück zu gelangen und weiteren Code abzuarbeiten. Sporadisch riss dort manchmal die Verbindung ab obwohl das Dokument noch offen war – wahrscheinlich weil Word irgendwelche Ressourcen aufgeräumt hat. Habt Ihr solche Probleme ebenfalls – evtl. auch erst nach längerer Zeit oder einem Rechner Standby?
-> Ist Euch so etwas schon mal mit Late Binding passiert oder muss ich mir da keine Gedanken machen?

Dankesehr!

Thema: C# Anwendung zum Fernsteuern von Office (Word/Excel/...)
Am im Forum: Office-Technologien

Hallo Abt!

Danke. Habe ich gelesen - aber damit kann ich Dokumente auch ohne Benutzereingriffe manipulieren, wenn die C# Anwendung z. B. auf dem Server liegt.

Ich möchte aber während der Benutzer an einem Dokument arbeitet, auf die Word/Excel/Outlook - Instanz einen Zugriff haben und interagieren. Ich hatte dies etwas im Punkt "Word geöffnet lassen und das Schließen abfangen" beschzieben.

Es geht mir also primär nicht nur um das Verändern von Dokumentenihnalten, sondern die Fernsteuerung von Word/Excel/Outlook aus C# heraus. Das das über OpenXML möglich ist, habe ich noch nirgend wo gelesen - Gibt's dazu einen guten Artikel, wenn es so ist?

Wäre dann OpenXML die zukunftsfähige Technik um die beschriebenen Punkte umzusetzen?

Dankesehr!

Thema: C# Anwendung zum Fernsteuern von Office (Word/Excel/...)
Am im Forum: Office-Technologien

Word, Excel und eventuell später Outlook sollen aus einer C# WPF Anwendung ferngesteuert werden (Öffnen, Text/Objekte einfügen, das Schließen des Dokuments durch den Benutzer abfangen etc.) und ich habe keine so richtig aktuellen und themenübergreifende Infos dazu gefunden (auch hier ist eine detaillierte Info von Rainbird noch aus dem Jahr 2006).

Es soll dazu kein Zusatztool/Zusatzcontrol verwendet werden.

- Welcher Weg ist bei der Automation der neuste Stand der Technik?

- Welchen Weg geht Microsoft in absehbarer Zukunft? Wird es eine andere Technik dafür geben oder wird die Automation evtl. sogar irgendwann eingestellt, weil man sich nur noch hauptsächlich um die Belange der Privatpersonen kümmert?

- Verschiedene Word/Excel/Office Versionen sollten unterstützt werden:

• Gibt es Code, der bei allen Word/Excel/Office-Versionen 2010/2013 läuft (und evtl. auch in den Folgeversionen lauffähig bleiben wird – ja, sicher weiß das natürlich niemand.)?

• Was ist, wenn die eigene C# Anwendung auf einem Windows-Tablet (mit Tastatur) installiert wird und dort nur das „Outlook RT“ installiert wurde. Funktioniert die Automation dann trotzdem?

• Ich habe mich auch etwas über „Late Binding“ informiert (kein IntelliSense-Unterstützung beim Programmieren, keine Syntax-Prüfung beim Kompilieren, keine eingebauten Konstanten nutzbar). Sollte man diesen Weg gehen, damit man alle Word/Excel/Outlook-Versionen unterstützt?

- Wenn die eigene C# Anwendung als 32bit kompiliert wird, sollte Office 32 Bit unterstützt werden, wenn sie 64bit kompiliert wird, sollte auch das Office 64 Bit unterstützt werden. Alles am besten in einem einzigen Code. Der Kunde setzt dann je nach dem entweder die 32 Bit oder die 64 Bit Version ein.

- Wie testet ihr den Code dann 32/64bit auf unterschiedlichen Office-Versionen? – Theoretisch müsste man für jede Kombination auf einen Rechner installieren und dazu noch das VS, um den Code anzupassen? Das ist doch sehr aufwendig? – Es soll aber trotzdem ohne Fremd-Control gemacht werden.

- Mit einer anderen Entwicklungsumgebung hatte ich bei der Automation Probleme (allerdings erst ab Office 2010; alle Office-Vorversionen funktionieren einwandfrei), wenn ich das Word-Dokument per Automation geöffnet habe, es vom Benutzer bearbeitet wurde und ich die Verbindung zum Word bis zum Schließen gehalten habe, um nach dem Schließen von Word wieder in mein Programm zurück zu gelangen und weiteren Code abzuarbeiten. Sporadisch riss dort manchmal die Verbindung ab obwohl das Dokument noch offen war – wahrscheinlich weil Word irgendwelche Ressourcen aufgeräumt hat. Habt Ihr solche Probleme ebenfalls – evtl. auch erst nach längerer Zeit oder einem Rechner Standby?

>>>>>>>> Mit welchem Weg der all das obere abdeckt kann man am besten arbeiten? Gibt es irgendwo Codesnippets/eine einfache und sehr ausführliche gesamtheitliche Info dazu?

Dankesehr!

Thema: erledigt - Entity Framework: Erstellen mit Create Database klappt nicht mehr
Am im Forum: Datentechnologien

Da es hier scheinbar keine Lösung gibt, wird die Datenbank mit den Grundtabellen etc. nun ausgeliefert und manuell importiert.

Damit ist das Thema geschlossen. Danke für die Hilfe.

Thema: erledigt - Entity Framework: Erstellen mit Create Database klappt nicht mehr
Am im Forum: Datentechnologien

Hallo Abt!

Entschuldige! Die neuste derzeit installierbare EF-Version ist die 6.1.1, wobei ich ein Update vom EF 5.0 gemacht habe. Gearbeitet wird mit ObjectContext.
Was noch auffällt: Evtl. wurde in diesem Zuge auch das .NET Framework 4 auf 4.5 geändert. - Leider nicht ganz nachvollziehbar, da wir immer nur Sicherungen der letzten Stände haben und die Datenbank bereits länger nicht mehr angelegt hatten.

Es sind wirklich nur die beiden Einzeiler, wobei in der 2. Zeile dann der erwähnte Fehler auftritt:

mydataentities.ExecuteStoreCommand("USE master");
mydataentities.ExecuteStoreCommand("CREATE DATABASE test");

Auch IMPLICIT_TRANSACTIONS vorher abzusetzen, bringt nichts.

USING(TransactionScope... wird nicht genutzt. Die Befehle werden einfach ausgeführt.

Habe zudem festgestellt, dass auch wenn die Datenbank per Hand in der Management Console angelegt wird, die restlichen Folgebefehle (einzeln nacheinander abgesetzt) die die Datenbank betreffen, z. B. SET ... in der Datenbank auch nicht ausgeführt werden. Die Tabellen, Felder und Indizes können aber problemlos angelegt werden, wenn man zuvor die Datenbank händisch in der Management-Console angelegt hat.

Ein Wechsel in die DB mit "USE" ist ebenso möglich. Habe aber wie auch in der bestehenden Datenbank volle Berechtigung.

Versucht auch als sa und mit Windows-Authentifizierung. Auch bei diesen Anmeldungen zusätzlich weitere Rechte in der MMC vergeben. Ebenfalls kein Erfolg.

- Alle weiteren Einstellungen der neu erstellten Datenbank sind mit der bereits bestehenden Datenbank identisch. (Bis auf den Namen)

- Auch "Handling of transaction commit failures" in der von Dir geposteten Seite bringt mich nicht weiter. Evtl. hat es etwas mit dieser Änderung daran zu tun?

Nur die Datenbank kann also nicht neu erstellt werden und Datenbankeinstellungen können nicht per ALTER DATABASE abgesetzt werden. Alles andere funktioniert.

Früher hat es wie gesagt 1a funktioniert. Am Code wurde nichts geändert.

Bitte nochmals sehr um Hilfe!

Grüße

Thema: erledigt - Entity Framework: Erstellen mit Create Database klappt nicht mehr
Am im Forum: Datentechnologien

Hallo Abt!

über die Suche bin ich auch auf SET IMPLICIT_TRANSACTIONS gekommen. Leider bringt das auch nichts.

Ich verbinde mich zuerst mit der master-Datenbank und setze dann direkt den CREATE DATABASE ab. Teilweise setze ich vorher IMPLICIT_TRANSACTIONS. Sonst mache ich nichts weiter. Trotzdem der Fehler beim Erstellen der Datenbank.
Auch führe ich diese Befehle einzeln und nicht zusammen aus.

Bisher ist es genau so gelaufen. Es wurde daran nichts geändert und mit einem Mal führt es zu dem Problem.

Was ist das?

Danke!

Thema: erledigt - Entity Framework: Erstellen mit Create Database klappt nicht mehr
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <SQL-Server 2010>

Hallo!

Bisher wurde mit ExecuteStoreCommand ein CREATE DATABASE - Befehl problemlos abgesetzt.

Seit der neuen Entity Framework-Version, klappt das auf einmal nicht mehr (Code wurde nicht geändert).

Es wird der Fehler "Die CREATE DATABASE-Anweisung ist in einer Transaktion mit mehreren Anweisungen nicht zulässig." angezeigt.

- Es wird vorher nur mit USE master die Master-Datenbank geöffnet. Sonst nichts weiter.
- Alternativ bereits vorher probiert SET IMPLICIT_TRANSACTIONS OFF. Bringt auch nichts.

- Rechte sind auch vorhanden, es ist kein weiterer Befehl angehangen.

Arbeite mit DatabaseFirst-Ansatz.

Was hat sich da geändert?

Auch hier steht nichts genauer beschrieben: Fehler beim Erstellen einer Datenbank

Danke

Thema: EF 6 Fluent API bei DatabaseFirst
Am im Forum: Datentechnologien

Hallo LatinChriz!

Wieder einmal vielen Dank für die Hilfe!

Zitat
empfehle ich dir einfach mal das Model von der Datenbank upzudaten und davor ev. das Model selbst zu leeren damit es Konsistent mit der Datenbank ist

--> Ich habe schon alles versucht: über Kontextmenü "Aktualisieren", eine einzelne Tabelle zu entfernen und wieder einzufügen, Alle Tabellen aus dem grafischen Designer gelöscht, Programm bereinigt dann neu gestartet und alle Tabellen wieder hinzugefügt (und dabei die Anordnung aller Tabellen im Designer verloren) Alles ohne Erfolg. Gleiche Fehlermeldung.

1.) Auch sind die Annotations nicht drinnen, was aber verständlich ist, da die ältere Datenbank sich a) NICHT an die normierte Feldbeschreibung hält und b) die Keyspalten vom Typ GUID sind - was aber nach einigen Webseiten kein Problem bedeuten sollte. Jedoch werden im grafischen Designer die Schlüsselspalten mit einem Schlüsselsymbol korrekt markiert.

Daher habe ich die Zuweisungen per FluentAPI gemacht.

2.) Ja der EDMX-Designer würde alle Annotations nach einer Änderung entfernen. Daher nutze ich Fluent API und da die DbContext Klasse partial ist, mache ich das in meinen eigenen Dateien. Du schreibst "[Key]" statt Haskey. [Key] ist aber der andere Weg über Dataannotations.

3.) Siehe Zitat oben, alles schon versucht

4.) Da die Datenbank schon älter ist und "draußen" existiert und einige DBA's sehr eigen sind, würde ich schon gerne beim DatabaseFirst Ansatz bleiben.

Was ich halt nicht verstehe ist, dass es bei ObjectContext alles vom Designer automatisch gemacht wurde (Key und Beziehungen) und nun nach dem Update auf EF 6.1 nicht mehr.

Vielleicht noch irgendwelche Tipps?

P.S. Die Fettschreibung hatte ich zur besseren Übersicht gewählt, es sollte nicht als "schreien" aufgefasst werden.

Danke

Thema: EF 6 Fluent API bei DatabaseFirst
Am im Forum: Datentechnologien

Hallo Witte!

Nein. Da ich vom ObjectContext komme, habe ich noch keine einzige Migration über Nuget gemacht und es gibt dafür auch keine CS-Files.

Es existiert nur die grafische EDMX-Datei, die die Entitätsklassen unter sich erstellt hat. Allerdings nur die einzelnen Felder ohne die Annotations. Das ist ja eigentlich auch der richtige Ansatz, da ich derzeit nicht CodeFirst nutze und auch nicht möchte.

Grüße

Thema: EF 6 Fluent API bei DatabaseFirst
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <SQL-Server 2012>

Hallo!

Ich bin noch an der Umstellung von EF 5 + Object-Context + Database First nach EF 6 + DbContext + Database First.

Ich nutze den EDMX-Designer und "Entity Framework 6.0.2 Tools for Visual Studio 2012" sind installiert.

Inzwischen habe ich mich sehr in das EF 6 eingearbeitet, habe aber folgendes Problem, da meist nur EF6+CodeFirst beschrieben wird, ich aber vorerst bei DataBase First bleiben möchte.

Bei ObjectContext unter EF5 hat der EDMX-Designer immer alle Key-Annotations plus alle Beziehungen selbst erstellt. Das macht er jetzt nicht mehr, sondern legt nur noch die nakten Entity-Klassen an. Im EDMX-Designer zeigt er aber trotzdem bei den Schlüsselspalten ein Bild mit einem Key davor.

1. Ist das ein Fehler im Designer oder muss ich nun diese Sachen selbst machen, obwohl ich DatabaseFirst nutzen möchte und alle Keys und Beziehungen in der Datenbank bereits vorhanden sind?

Falls ich sie selbst machen muss, habe ich mich für Fluent API (statt DataAnnotations) entschieden: Mit HasKey den Schlüssel für alle Entitäten festgelegt und mit HasRequired die Tabellenbeziehungen.

Leider kommt nun noch beim 1. Ausführen des 1. Linq-Befehls folgender Fehler:

Zitat
Das Unterstützungsmodell des Kontexts 'MyEntities' wurde seit der Erstellung der Datenbank geändert. Sie können Code First-Migrationen verwenden, um die Datenbank zu aktualisieren (http://go.microsoft.com/fwlink/?LinkId=238269).

So und jetzt bin ich wieder auf der Webseite vom Anfang. Er möchte unbedingt den Codefirst-Ansatz und sagt mir nicht, wo genau der Fehler liegt!

Brisant dabei: In der Linq-Abfrage wird eine Tabelle abgefragt, die nur einen Key, aber keine Beziehung hat und der Key wurde mit HasKey ordentlich definiert.

Ich habe im EDMX-Designer bereits eine Validierung und Aktualisierung durchgeführt, jedoch ohne diesen Fehler wegzubekommen.

3. Es scheint irgend etwas in der Datenbank und im Model noch anders zu sein. Nur wie finde ich es heraus was genau das ist?

4. Sollte ich vielleicht den EDMX-Designer zukünftig nicht mehr benutzen und komplett auf den CodeFirst-Ansatz umswitchen? Achtung: Die Tabellenerstellung und Updatefunktion habe ich derzeit in einem Updateprogramm durch SQL-Befehle geregelt. Das sollte, wenn möglich, auch zukünftig weiter genutzt werden - statt dem CodeFirst-Tabellen-Updateprozess (obwohl dieser relativ stimmig erscheint).

Vielen Dank für Eure Hilfe!

Thema: [erledigt] EntityFramework + DBContext: Connection öffnen
Am im Forum: Datentechnologien

Hallo Palin!

der Link und die Unterlinks waren sehr gut und ich habe sogar das Testprojekt umgesetzt.

Allerdings wurden diese Entitäten bereits durch den EDMX-Designer korrekt erzeugt.

Das Problem war, dass der Connectionstring zwar richtig war, aber zuerst initialisiert und dann der .ConnectionString gesetzt wurde. Bei ObjectContext war das bisher kein Problem, nur DbContext will es direkt im Konstruktor haben.

Also läuft die Connection ersteinmal!

Nochmals Danke an alle!

Thema: [erledigt] EntityFramework + DBContext: Connection öffnen
Am im Forum: Datentechnologien

Hallo Abt!

Ich verstehe, das Du keine Lösung vorkauen möchtest und ich selbst darauf kommen muss. Bitte verstehe auch mich: Ich bin seit einer Woche an der Umstellung von ObjectContext auf DBContext und mit dem übernommenen Code wirklich am verzweifeln. Zudem habe ich auch ein Zeitproblem, da ich nicht damit gerechnet habe, dass das Update von EF 5 auf EF 6 so aufwendig ist.

Zuersteinmal zurück zu EF 5 will ich nach der Woche aber leider auch nicht, da ich so extrem viel Arbeit hineingesteckt habe.

Ich bin froh über jede Hilfe, da ich weiß, das ihr das freiwillig macht. Dafür Hut ab!

Ich habe im letzten Eintrag meine Fortschritte geschrieben und hoffe, Du kannst mich nochmals bei der Entscheidung unterstützen.

Ich schwöre Dir, der untere Code steht bei mir in der automatisch generierten "MyModel.Context.cs"-Datei (also erst wenn man die TT-Datei aufklappt); nicht jedoch in der MyModel.Context.tt-Datei (diese beginnt mit einem "<#") und auch nicht in der MyModel.Designer.cs-Datei (die nur einen Kommentar enthält):


public partial class MyEntities : DbContext
     {
         public MyEntities()
             : base("name=MyEntities")
         {
         }
         ..... 

Aber vielleicht hast Du das ja gemeint mit TT-Datei, da sie darunter angezeigt wird?
Zitat
a) muss man wissen, was sie tun und b) muss man wissen, wie der generierte Inhalt anzusprechen ist. Beide ist bei Dir wohl eher nicht der Fall.

Da gebe ich Dir allerdings Recht. Ich versuche mich aber damit zu beschäftigen. Nun schon seit einer Woche.
Zitat
Du kannst problemlos den generierten Context links liegen lassen und eine eigene Klasse erstellen, die von DbContext erbt und die nutzen - nach Deinen wünschen. Wo ist das Problem?

--> Das ist ein sehr guter Hinweis. Wenn ich wirklich den grafischen Designer ignoriere und alles per Hand codiere.

Momentan steht in der MyModel.Context.cs (unterhalb der MyModel.Context.tt) u. a. folgendes:


         protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Kunde> Kunde { get; set; }
        public virtual DbSet<Lieferant> Lieferant { get; set; }
        ...

--> Ich müsste faktisch nur die obere OnModelCreating-Methode füllen sowie bei jedem Einfügen einer neuen Tabelle das DbSet unten ergänzen.
- Kannst Du einen Link empfehlen, wo das richtig gut erklärt wird? Ich würde mich da gerne - trotz Zeitmangel - richtig einarbeiten.

Besten Dank!

Thema: [erledigt] EntityFramework + DBContext: Connection öffnen
Am im Forum: Datentechnologien

Hallo Palin und Abt!

Zitat
Vergleich mal deinen ConectionString mit den vom EF erzeugten.

Super und erst einmal vielen Dank! Damit führtest Du mich bereits weiter in Richtung Lösung! Die vom EF erzeugten steht in der app.config. --> Und die Fehlermeldung besagte ja: "Der Eintrag \"MyEntities\" wurde bereits hinzugefügt."

Das brachte mich auf die Idee, in der app.config den Abschnitt, wo die Verbindungszeichenfolge gespeichert wird auszudokumentieren. Also alles im Bereich "<connectionStrings>". Und siehe da: Das Programm öffnet nun korrekt die Connection!

Folgendes wurde automatisch eingefügt:


protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

Nun läuft das Programm schon einmal los.

Aber schon bei der ersten Abfrage von der Datenbank kommt nun folgender Fehler:
Zitat
„Code, der mit den T4-Vorlagen für die Database First- und Model First-Entwicklung generiert wurde, funktioniert im Code First-Modus möglicherweise nicht ordnungsgemäß. Wenn Sie weiterhin 'Database First' bzw. 'Model First' verwenden möchten, stellen Sie sicher, dass die Entity Framework-Verbindungszeichenfolge in der config-Datei der ausführenden Anwendung angegeben ist. Um die mit 'Database First' oder 'Model First' generierten Klassen im Code First-Modus zu verwenden, fügen Sie eine ggf. erforderliche Zusatzkonfiguration mithilfe von Attributen oder der DbModelBuilder-API hinzu, und entfernen Sie dann den Code, der diese Ausnahme auslöst.“

>> Klar, weil ich ja vom DB-First her komme.

Ich würde wahrscheinlich auf "Code First with an existing database" gehen

Und dadurch steht erneut eine Grundsatzentscheidung an:

Ist nun "data annotations" oder "fluent api" empfohlen?

Vielen Dank für Eure Hilfe!!!!

Thema: [erledigt] EntityFramework + DBContext: Connection öffnen
Am im Forum: Datentechnologien

Hallo LatinChriz!

Zuersteinmal auch an Dich vielen Dank!

Ich habe mir wirklich Zeit genommen, komme aber noch immer nicht weiter. Du schreibst:

Zitat
Falls du nun gerne einen Konstruktor hast dann musst du die Templatevorlage ändern - also die *.tt Files,
und diese werden bei jedem speichern/ändern vom Modell neu ausgeführt.

--> Abt sandte den Link, bei dem der Konstruktor überladen werden sollte. Dieser Abschnitt befindet sich bei mir aber in der MyModel.Context.cs - nicht jedoch im tt-File


   public partial class MyEntities : DbContext
    {
        public MyEntities()
            : base("name=MyEntities")
        {
        }
        .....

Wenn ich ihn nun wie im Beispiel angegeben erweitere, schreibe ich in der MyModel.Context.cs folgendes dazu:
Zitat

public MyEntities(string connectionString) : base(connectionString)
{
Database.Connection.ConnectionString = connectionString;
}

Nun lässt sich meine Zeile


MyEntities myEntities = new MyEntities(entityBuilder.ToString());

zwar kompilieren aber löst eine Exception während der Ausführung aus:
Zitat
Der Eintrag \"MyEntities\" wurde bereits hinzugefügt.

Übergebe ich sqlBuilder.ToString() geht es auch nicht. Da kommt die Meldung:
Zitat
Schlüsselwort wird nicht unterstützt: 'data source'.

Theoretisch brauche ich auch die Überladung des Konstruktors im selbst generierten File wie oben angegeben ja gar nicht und könnte direkt folgendes angeben:


MyEntityConnection = new EntityConnection();
   MyEntityConnection.ConnectionString = entityBuilder.ToString();
// oder
   MyEntityConnection.ConnectionString = sqlBuilder.ToString();

Und das bringt mir aber leider natürlich die identischen Fehlermeldungen wie oben. Das Problem ist nicht die Überladung des Konstruktors, sondern das mein Connection-String nicht akzeptiert wird. Das Projekt wurde ja nur von ObjectContext auf DB-Context umgestellt.

Eine Erklärung könnte sein, dass beim DB-Context der Context ja bereits existiert und daher auch die Meldung kommt. Also scheint der entityBuilder.ToString()) zwar die richtige Wahl zu sein, wird jedoch vom T4-Template verhindert?

- Ist das so?

- Nur wie kann ich dann die Daten zur Laufzeit übergeben/ändern?

- Einen ähnlichen Artikel wie Abt habe ich hier gefunden:

http://social.msdn.microsoft.com/Forums/en-US/deab3d98-c392-496a-a6ee-aa181157ebc6/passing-a-connectionstring-in-dbcontext-constructor?forum=adodotnetentityframework

Ich bin gerade wirklich am Verzweifeln!

Vielen Dank für Eure Mühe!!!

Thema: [erledigt] EntityFramework + DBContext: Connection öffnen
Am im Forum: Datentechnologien

Hallo Abt!

Erst einmal besten Dank.

Zitat
Du muss den Generator nicht nutzen!!!

Das heißt, ich soll den Generator nicht nutzen? Ich habe mir inzwischen ernsthaft überlegt, zurück zu gehen zu ObjectContext und dann den Code, den der Generator erstellt für die zukünftigen Tabellen manuell zu schreiben.

- Das ist wahrscheinlich 1000 mal weniger Aufwand als die Umstellung auf DBContext.
- Zudem brauche ich nicht immer die Tools vom Team zusätzlich installieren

1.) Nur wie lange kann ich so arbeiten? Wird der ObjectContext oder der direkte Zugriff darauf irgendwann abgeschafft? Oder wird er weiter bestehen? (DbContext ist ja eigentlich nur ein Wrapper darum)
Zitat
Der Generator erzeugt Dir zwar die Klasse; aber Du kannst sie doch verändern, wie Du lustig bist.

---> Und genau das will ich nicht. Der Code wird ja jedes mal mit dem einfügen einer neuen Tabelle neu generiert. Alle Änderungen müsste ich dann immer erneut ausführen. Und es ist ja an sich nicht empfohlen, diese Dateien zu verändern.

Was auf Deiner Seite beschrieben wird habe ich nun versucht manuell zu machen:


  MyEntityConnection = new EntityConnection(sqlBuilder.ToString());

Das funktioniert derzeit trotzdem nicht, da Fehler "Schlüsselwort wird nicht unterstützt:" "data source".

sqlBuilder.ToString() enthält folgendes:

"Data Source=.;Initial Catalog=MyDB;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True;Connect Timeout=6"

Übergebe ich den String aus Interesse einfach direkt und entferne "Data Source=.", bemängelt er das nächste Schlüsselwort "Initial Catalog".

Warum akzeptiert er nicht einmal mehr einfache Connectionstrings?

Momentan sehe ich leider nur noch rot, da mich diese Umstellung auf DBContext völlig aus der Bahn wirft. Bitte nochmals um Hilfe!!!!

Thema: [erledigt] EntityFramework + DBContext: Connection öffnen
Am im Forum: Datentechnologien

Hallo!

Folgendes hat vor der Umstellung von Object-Context auf DB-Context einwandfrei geklappt:


MyEntityConnection = new EntityConnection(entityBuilder.ToString());
//... einige Schritte...
MyEntities myEntities = new MyEntities(MyEntityConnection);

Leider kann dem Konstruktor in der untersten Zeile nun keine EntityConnection übergeben werden, da nun der DB-Context das nicht mehr unterstützt.

Wie kann ich es ändern? (Da es hier sehr viel Beiwerk im Programmcode gibt, sollte "MyEntityConnection" unbedingt erhalten bleiben und weiterhin übergeben werden.)


MyEntityConnection = new EntityConnection();
//... einige Schritte...

// Nun ohne Parameter - funktioniert:
MyEntities myEntities = new MyEntities();

// Diese Zeile läuft natürlich nicht, wie kann ich die EntityConnection dann übergeben? Wie muss diese Zeile lauten:question:
myEntities.Configuration.Entity = MyEntityConnection;

Irgendwie muss ich nun in der letzten Zeile noch MyEntityConnection übergeben. "myEntities.Configuration.Entity" gibts natürlich nicht. Wie wird das dann gemacht?

Vielen Dank!!!!!

Thema: EF 6: Object-Context zu Db-Context
Am im Forum: Datentechnologien

Hallo Abt!

Ich habe den Code auch nur übernommen und die Umstellung auf DB-Context wird nun notwendig. Alles neu zu schreiben kommt nicht in Frage. Auch ich habe noch viele Defizite.

Daher bitte trotzdem versuchen zu Helfen! Danke


MyMethode(System.Data.Entity.Core.Objects.DataClasses.EntityObject MyEObject){
}

Da werden z.B. Änderungen protokolliert. Übergeben wird ein Datensatz aus einer beliebigen Tabelle der Datenbank, z. B. kunde aus der Kunden-Tabelle oder lieferant aus der Lieferanten-Tabelle. Kann ich also Object verwenden oder gibt es ein spezielleres Objekt dafür?


kunden.PropertyChanged += new PropertyChangedEventHandler(_kunden_PropertyChanged); 

Davor ist "kunden" so definiert: public Kunden kunden = new Kunden();

Hier soll sofort Code ausgeführt werden, sobald sich etwas an irgend einem der Felder (z. B. Kundenname, Ort, Straße usw.) ändert. Bisher als EntityObject vor der Umstellung hat es einwandfrei geklappt und das PropertyChanged korrekt ausgelöst. Wie kann das nun ausgelöst werden, ohne den ganzen Code umzustellen?

Für die von mir geschriebene Refresh-Lösung gibt es keinen anderen Ansatz?

Nochmals vielen vielen Dank!!!

Thema: EF 6: Object-Context zu Db-Context
Am im Forum: Datentechnologien

Hallo Abt!

Erstmal großen Dank für den Link zu den Framework-Tools! Und vielen Dank das man hier auch mit einem weniger großen Wissensstand Hilfe erfährt!

Ich habe sie inzwischen installiert und den Code bereits begonnen umzustellen. Viele Sachen sind einfach nur an anderen Stellen untergebracht und können leicht angepasst werden.

Wo ich aber richtig Probleme habe ist folgendes:

Einer Methode kann ich irgend einen Datensatz übergeben. Bisher wurde der Parameter so übergeben:


MyDB.Kunden kunden = myEntities.Kunden.Where(...).FirstOrDefault();

MyMethode(System.Data.Entity.Core.Objects.DataClasses.EntityObject MyEObject){
}

Nach der Umstellung kommt natürlich beim Parameter "EntityObject" ein Fehler.
Darf ich hier stattdessen "Object MyEObject" angeben oder gibt es da etwas spezielleres, was benutzt werden sollte?

Außerdem gibt es keine Refresh-Methode mehr, bzw. sitzt sie wo anders:


myEntities.Refresh(StoreWins, kunden)

Jetzt könnte ich es scheinbar so lösen:


var context = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)myEntities).ObjectContext;
context.Refresh()

Dann nutze ich aber doch wieder über den ObjectContextAdapter indirekt den ObjectContext, den ich ja eigentlich vermeiden will. Kann ich das nicht anders und direkt lösen?

Und hier mein größtes Problem:


kunden.PropertyChanged += new PropertyChangedEventHandler(_kunden_PropertyChanged);

Warum gibt es kein PropertyChanged mehr? Hierzu habe ich nur sehr seltsame Lösungen gefunden, bei der die ..tt-Datei geändert werden muss. Das möchte ich natürlich unbedingt vermeiden! Gibt es dort etwas anderes?

Tausend Dank!

Thema: EF 6: Object-Context zu Db-Context
Am im Forum: Datentechnologien

Hallo Abt!

public static ist ja nur die Methode, die mir die Verbindung zurückgibt. Dadurch kann ich sie einfach von überall aufrufen.

Die Verbindung selbst, die innerhalb der static-Methode erstellt wird ist ja dadurch nicht auch automatisch static. Es sollte daher also keine Probleme geben.

Sobald eine Verbindung nach der Benutzung später wieder geschlossen wird, räumt die GC ja trotzdem alles auf. Oder erzeugt das eine hängende Referenz?

CodeFirst oder EDMX

- Was würdest Du empfehlen: Mit dem vorgeschlagenen Tool arbeiten oder besser gleich doch den CodeFirst Ansatz wählen?

- Wenn ich den Db-Context+CodeFirst-Ansatz wählen würde, bekomme ich im gesamten Programm auch in gleicher Weise wie bisher (also bei ObjectContext+EDMX) Zugriff auf meine Daten und muss nur einige Namespaces und Typen ändern oder muss ich dann das komplette Verhalten meines Programms ändern?

Tausend Dank!

Thema: EF 6: Object-Context zu Db-Context
Am im Forum: Datentechnologien

Danke für die schnelle Hilfe!

Bei Microsoft habe ich folgendes gefunden:
http://visualstudiogallery.msdn.microsoft.com/66612113-549c-4a9e-a14a-f629ceb3f89a

Dort wird aber geschrieben, dass man besser mit DB-Context arbeiten sollte und das Tool nur für bestehende Anwendungen nutzen sollte.

Das von Dir beschriebene Tool hat damit also nichts zu tun und ich kann damit zukünftig über DB-Context arbeiten? Stellt das Tool den Code automatisch um?

Und warum reicht es nicht das EF über Nuget zu ziehen? Ich bin dann doch zukünftig immer auf dieses Tool angewiesen? (Was ich auch nicht sein möchte. Evtl. wird es irgendwann einmal eingestellt?)

- Ich möchte schon gleich auf DB-Context umsteigen.

- Kann es sein, dass es irgend wann das Tool nicht mehr gibt und ich dann sowieso umstellen müsste?

Ich möchte später nicht noch mehr Arbeit haben und würde gerne die Umstellung probieren:

Ich habe z. B. einen Methode, die mit die Verbindung öffnet und die Verbindung als Rückgabewert zurückgibt:


public static MyEntities OeffneVerbindung(...)
{
   ...
   EntityConnection MyEntityConnection = null;
   MyEntityConnection.Open();
   ...
   MyEntities myEntities = new MyEntities(MyEntityConnection);
   ...
   return myEntities;

Leider findet er in der Zeile "public static MyEntities" nach der Umstellung zu DB-Context die "MyEntities" nicht mehr. Was muss ich dann dort angeben? Bisher habe ich danach über MyEntities.Tabelle auf die Daten zugreifen können.

Danke vielmals!

Thema: EF 6: Object-Context zu Db-Context
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <SQL-Server 2012>

Hallo Experten!

Habe nun auf EF6 geupdatet und es wird höchste Zeit, auf Db-Context umzustellen. Ich nutze den Ansatz "DB first" und daher sollten mir auch in Zukunft aus den Tabellen der Code erstellt werden.

Ändere ich im Edmx-File die Strategie auf "Keine", bekomme ich ja in der Designer.cs nichts mehr angezeigt.

- Wo muss ich dann meine Klassen definieren?

- Bisher waren dort alle Klassen "Partial" definiert, was für mich auch wichtig ist, da ich sie an anderen Stellen noch erweitert habe. Kann ich sie beim Db-Context auch als partial definieren?

Gibt es irgend eine gute Anleitung dazu?

Danke vielmals

Thema: WPF-Fenster und Ressourcenverbrauch nach dem Schließen
Am im Forum: GUI: WPF und XAML

Hallo Abt!

Danke nochmals! Dann nutze ich erst einmal den integrierten Profiler.

Das .NET dann für ein einfaches Programm mal schnell 300 MB benötigt, wenn man WPF-Fenster einfach immer wieder öffnet und schließt kann ich trotzdem nicht ganz nachvollziehen.

Wenn die GC nur dann etwas cleared, wenn sie denkt, dass es gerade geht weil wenig "los" ist und es wahrscheinlich nicht mehr benötigt wird ist mir klar.

Aber ich dachte, der Vorteil der GC liegt darin, wenn ich ein Fenster mehrmals öffne und schließe die GC das erkennt und dann die alten Ressourcen erneut nutzt und so nicht mehr Speicher benötigt und die Aktion schneller durchführen kann.

Ich komme halt von der normalen "nicht-.NET" Entwicklung, wo die Programme um ein Vielfaches kleiner sind.

ALSO heißt das: Close() räumt tatsächlich alles weg und die GC kümmert sich sehr viel später darum. Ich werde mir dann keinen Kopf mehr machen.

Danke

Thema: WPF-Fenster und Ressourcenverbrauch nach dem Schließen
Am im Forum: GUI: WPF und XAML

Hallo Abt!

Danke für den Tipp mit dem Profiler. Da gehen allerdings die Preise bei 375 € los und enden bei 775 €. Gibt es erst einmal einen empfehlenswerten Freeware-Profiler?

Kann man sonst irgendwie die GC nach dem Schließen erzwingen? Close() müsste ja alles tatsächlich schließen. Hängende Referenzen dürfte es ja beim .NET nicht geben? Oder könnte ich diese erst einmal mit VS Bordmitteln lokalisieren?

Danke!

Thema: WPF-Fenster und Ressourcenverbrauch nach dem Schließen
Am im Forum: GUI: WPF und XAML

Hallo!

lasse ich mir im Taskmanager den Ressourcenverbrauch anzeigen wird beim Öffnen eines WPF-Fensters ca. 2-10 MB mehr Arbeitsspeicher verbraucht. Aber nach dem Schließen des Fensters mit Close() bleibt der Speicher weiter unverändert.

Nun gibt es ja den GC, der die Ressourcen dann wieder automatisch freigibt und dessen Verhalten man scheinbar nicht steuern kann.

Aber arbeitet man mit der Anwendung, werden aus 100 MB Anfangs-Speicherverbrauch schnell 300 MB. etc.

Gibt es noch nach Close ein Befehl, mit dem man wirklich Aufräumen kann. Wo kann ich den Ressourcenverbrauch genau überprüfen?

Danke

Thema: WPF Textbox: Borderbrush beim Fokuserhalt gesucht
Am im Forum: GUI: WPF und XAML

Weiß vielleicht jemand, nach welchem Begriff ich suchen könnte? Das ist ja wahrscheinlich schon eine Systemfarbe?

Es gibt schon einige Blautöne bei den Systemfarben aber alle weichen ab. Es muss also irgendwo anders hinterlegt sein.

Thema: WPF Textbox: Borderbrush beim Fokuserhalt gesucht
Am im Forum: GUI: WPF und XAML

Hallo!

Wenn unter Windows 8 eine WPF Textbox den Focus erhält, wird sie anders gefärbt. Ich habe bereits viele "SystemColors. ..." durchgesehen, aber diese exakte Farbe nicht gefunden. Wird da von Windows evtl. noch an der Opacity gespielt?

Wie komme ich in C# auf diese Brush?

Meintestbutton.Foreground=SystemColors.UnknownBrush;

(z.B. HighlightBrush oder ActiveBorderBrush ist es zumindest nicht)

Hat denn wirklich niemand eine Idee?

Danke

Thema: WPF Combobox manuell oder per Code umgeschalten?
Am im Forum: GUI: WPF und XAML

Hallo Florian,

vielen Dank.

Sagen wir wir haben die Tabelle1 und darin die Felder Checkwert1 bis Checkwert 10. Der aktuelle Datensatz ist bereits per Binding gebunden.

PropertyChanged ist auch bereits für den Datensatz abonniert. Es wirkt sich aber derzeit auf den gesamten Datensatz aus.

Im Fenster ist es notwendig, das Checkwert1 an mehreren verschiedenen Stellen geändert wird (abhängig von anderen Parametern). Aber nur wenn Checkwert1 durch manuelles Anklicken der Checkbox1 geändert wird, soll eine Messagebox geöffnet werden und weiterer Code abgearbeitet werden. Ich kann mich also nicht rein auf das Checkwert1-PropertyChange stützen. Daher am besten der Ansatz direkt über das Checkbox-Control.

Das muss doch möglich sein? Ich verstehe nicht, wieso Microsoft das so kompliziert gemacht hat?

Thema: WPF Combobox manuell oder per Code umgeschalten?
Am im Forum: GUI: WPF und XAML

Hallo!

Hat irgend jemand noch eine Idee? X(

Das muss man doch herausfinden können!?

Thema: WPF Combobox manuell oder per Code umgeschalten?
Am im Forum: GUI: WPF und XAML

Hallo Christian!

Inzwischen bin ich wieder da.

Das gleiche Problem habe ich jetzt mit einer Checkbox. Auch hier muss ich unterscheiden:

1. Zweck:

Sobald die Checkbox gecheckt ist, soll IMMER ein bestimmter Text ausgegeben werden und verschiedenes am Layout geändert werden.

Das soll immer passieren (also wenn der Benutzer die Checkbox anklickt und auch wenn beim Laden der DataContext gesetzt wird)

2. Zweck:

Klickt der User aktiv die Checkbox an, um sie umzustellen, soll noch eine zusätzliche Abfrage z. B. per MessageBox erfolgen. - Diese soll natürlich beim Laden nicht geöffnet werden, da ja nur der letzte Zustand wiederhergestellt werden soll und der User ja bereits diese Messagebox ggfls. angeklickt hatte.

Somit muss ich unterscheiden können, ob der User geklickt hat oder ob sich nur der DataContext geändert hat.

Wenn ich nun sehr viele Checkboxen und Comboboxen habe, muss es doch möglich sein, diese Unterscheidung zu treffen, ohne dass ich noch für jede Combobox und Checkbox ein manuelles IsManualFired einbaue?

(Irgendwie müsste man das ja im "sender" oder "e" sehen, ob es der DataContext ist oder ein Mausklick oder Return-Taste etc. - Ich habe aber alles verglichen - ohne den Unterschied zu finden.)

Danke