Hallo,
Vielen Dank für eure Hilfe! Habe jetzt mal wieder das Kerbholz, die Knotenschnur und den Abakus ausgepackt und Pergament und Federkiel für Notizen bereitgelegt. Chef macht das HB-Männchen. Ist eh meine letzte Woche, dann geht es zur ESP32-Konfiguration. Soll sein Freund aus Fernost das Projekt umsetzen. VBA wollte er nicht.
Nochmal vielen Dank
Grüße Bigeddie
Habe ein ABO für microsoft365. Habe jetzt mal COM-Komponente für PowerPoint probiert. PowerPoint wird instanziiert, aber beim Versuch die Instanz sichtbar zu machen
var pt = new ppt1.Application();
pt.Visible = true;
erhalte ich folgende Meldung: "Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand Details
Fehler (aktiv) CS0012 Der Typ "MsoTriState" ist in einer nicht referenzierten Assembly definiert. Fügen Sie einen Verweis auf die Assembly "office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" hinzu. ConsoleApp1 C:\testsppt1\ConsoleApp1\ConsoleApp1\Program.cs 6"
Vielen Dank
Bigeddie
Hallo,
habe vor ca. 4 Jahren das letzte mal was mit Interops und Office gemacht und komme jetzt nicht weiter.
Mein Code sieht folgendermaßen aus:
using ppt1 =Microsoft.Office.Interop.PowerPoint;
using word = Microsoft.Office.Interop.Word;
using excel = Microsoft.Office.Interop.Excel;
var axel = new excel.Application();
axel.Visible = true;
// See https://aka.ms/new-console-template for more information
//Console.WriteLine("Hello, World!");
//var a = new ppt1.Application();
// var w = new word.Application();
// w.Visible = true;
//a.Visible = true;
Die Nuget-Packages sind alle installiert und vs2022 hat alle Updates und ich erhalte immer eine FileNotFoundException
"System.IO.FileNotFoundException: "Could not load file or assembly 'office, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'. Das System kann die angegebene Datei nicht finden."
ch hoffe ihr könnt mir etwas weiter helfen.
Viele Grüße
Bigeddie
Hallo Abt,
danke, dass du dir die Mühe mit der sehr ausführlichen Antwort gemacht hast!
Gibt es für die Definition der Relations (ohne die Nutzung der "Black Magic" Quellen über welche man sich das Wissen aneignen kann (fluent API)?
Habe nur die Doku bei MS gefunden und irgend welche mash-up Seiten die sich auf alle möglichen Versionen von EF beziehen ohne direkt auf die letzte Version von EF (core) einzugehen.
Vielen Dank
Bigeddie
Hallo Abt,
erstmal vielen Dank für die Infos, hat mir sehr weitergeholfen.
Von welchen Bedingungen hängt es eigentlich ab, ob ich ein Relationssetup verwenden "muss" oder nicht?
Oder sollte ich dies durch die Migrations kontinuierlich überprüfen?
Vielen Dank und viele Grüße
Bigeddie
Verwendetes Datenbanksystem: SQL-Server 2019 express & EF core 6
Hallo Gemeinde,
ich habe folgende 2 Klassen definiert:
public class Gender
{
public int Id { get; set; }
public string Text { get; set; }
}
public class Person
{
public int Id { get; set; }
public string Vorname { get; set; }
public string Nachname { get; set; }
public Gender Gender { get; set; }
}
Gender soll die Werte
enthalten und die Configuration läuft über
public class GenderConfiguration : IEntityTypeConfiguration<Gender>
{
public void Configure(EntityTypeBuilder<Gender> builder)
{
builder.HasKey(g=>g.Id);
builder.Property(p => p.Text).HasMaxLength(80);
}
}
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.HasKey(x => x.Id);
builder.Property(p => p.Vorname).HasMaxLength(80).IsRequired(false);
builder.Property(p => p.Nachname).HasMaxLength(80).IsRequired(false);
}
Die Migration sieht wie folgt aus:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Genders",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Text = table.Column<string>(type: "nvarchar(80)", maxLength: 80, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Genders", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Persons",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Vorname = table.Column<string>(type: "nvarchar(80)", maxLength: 80, nullable: true),
Nachname = table.Column<string>(type: "nvarchar(80)", maxLength: 80, nullable: true),
GenderId = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Persons", x => x.Id);
table.ForeignKey(
name: "FK_Persons_Genders_GenderId",
column: x => x.GenderId,
principalTable: "Genders",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_Persons_GenderId",
table: "Persons",
column: "GenderId");
}
Die Zeile
GenderId = table.Column<int>(type: "int", nullable: false)
verwirrt mich jedoch etwas, denn
Viele Grüße
Bigeddie
Hallo Bhaal,
Validationflags hatte ich garnicht auf dem Schirm, da alle Samples die ich gefunden habe(auch auf der Hersteller-Seite), diese auch nicht verwenden.
Jetzt läuft es auch mit dem Reader.
DANKE und viele Grüße
Bigeddie
Hallo Bhaal,
dann füge mal den Namespace als erstes Argument hinzu und lass es laufen.
Weiterhin habe ich auch mal den Namespace im Root-Element entfernt (Books.xml) und siehe da, es läuft ohne Fehler, obwohl kein "Name" knoten existiert, welcher ja lauf XSD mindestens einmal vorhanden sein muss.
Viele Grüße
Bigeddie
verwendetes Datenbanksystem: <XML>
Hallo Community,
ich habe folgendes gefunden:
Habe eine kleines Konsolen-Programm geschrieben welches mir über einen XmlReader eine XMl-Datei gegen ein XSD validieren soll. Aber die Validierung läuft auch gegen komplett andere Xml#s durch.
Hier der Code:
using System;
using System.Xml;
using System.Xml.Schema;
class XmlSchemaSetExample
{
static void Main()
{
XmlReaderSettings booksSettings = new XmlReaderSettings();
booksSettings.Schemas.Add(null, "books.xsd");
booksSettings.Schemas.Compile();
booksSettings.ValidationType = ValidationType.Schema;
//booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);
XmlReader books = XmlReader.Create("Adressen.xml", booksSettings);
//XmlReader books = XmlReader.Create("Books.xml", booksSettings);
int i=1;
try
{
while (books.Read())
{
Console.WriteLine($"Zeile gelesen {i}");
Console.WriteLine(books.Name);
Console.WriteLine(books.Value);
i++;
}
}
catch (Exception e)
{
Console.Write(e.ToString());
}
}
static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Message);
}
}
}
Das Schema:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
und zwei Xml's
<bookstore xmlns="http://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
validiert nicht, da der Knoten "Name" fehlt.
<?xml version="1.0" encoding="utf-8"?>
<Adressen>
<Adresse>
<Name>Müller, Lieschen</Name>
<Strasse>Musterstr.</Strasse>
<Hausnummer>4</Hausnummer>
<Plz>0815</Plz>
<Ort>Musterdorf</Ort>
</Adresse>
</Adressen>
Validiert, obwohl dieses XML nichts mit der Strüktur aus der XSD gemein hat.
Viele Grüße
Bigeddie
SQL-Server 2015 mit EF 6.4.4
Hallo, ich habe eine Stored Procedure, welche mir über OUT inserted.id die PK''s der aktualisierten Datensätze zurückliefert.
Nun meine Fragen:
Vielen Dank
Bigeddie
Hallo,
GETDATE() ist nicht auf meinem Mist gewachsen, sondern ein Requirement des Projektes welches ich grade bearbeite.
Anscheinend ist in EF6 (6.4) das Setzen eines Default-Value über eine ModelConfiguration nicht möglich, da ansonsten einer von euch darauf eingegangen wäre.
In EF Core 3.1, welches ich eigentlcih vorgeschlagen habe, ist dies kein Problem aber mein PM macht mir entsprechende Vorgaben.
Vielen Dank für eure Posts und
viele Grüße
Bigeddie
Hallo Abt,
10s Blick in die Doku hat mir gezeigt, dass es "HasColumnAnnotation" gibt. Soweit so gut stimmen wir überein. ABER
public DatumsModelConfiguration()
{
this.HasKey<int>(p=>p.Id);
this.Property(p=>p.Datum).IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed).HasColumnAnnotation("DefaultValueSql", "GETDATE()");
}
produziert mir bei der Migration
public override void Up()
{
CreateTable(
"dbo.DatumsModels",
c => new
{
Id = c.Int(nullable: false, identity: true),
Datum = c.DateTime(nullable: false,
annotations: new Dictionary<string, AnnotationValues>
{
{
"defaultValueSQL",
new AnnotationValues(oldValue: null, newValue: "GETDATE()")
},
}),
})
.PrimaryKey(t => t.Id);
}
Erwartet hätte ich jedoch (durch aktiven Eingriff in die Migration):
public override void Up()
{
CreateTable(
"dbo.DatumsModels",
c => new
{
Id = c.Int(nullable: false, identity: true),
Datum = c.DateTime(nullable: false, defaultValueSql:"getdate()")
})
.PrimaryKey(t => t.Id);
}
So dass eigentlich
CREATE TABLE DatumsModel (
Id int NOT NULL IDENTITY,
Datum datetime NOT NULL DEFAULT 'getdate()',
CONSTRAINT PK_dbo.DatumsModels PRIMARY KEY (Id)
)
als Script generiert werden sollte.
Nun noch die Frage: Wo liegt der Fahler?
Viele Grüße
Bigeddie
verwendetes Datenbanksystem: EF6 & SQL Server
Hallo,
wie kann ich in einer von EntityTypeConfiguration<Entity> abgeleiteten Klasse für ein Property einen Default-Value definieren?
Viele Grüße
Bigeddie
verwendetes Datenbanksystem: <XmlDocument>
Hallo,
beim Abfragen von Daten in einem XmlDocument mit XPath erhalten ich bei der Angabe eines exakten Pfades (z.B. /Stadt/Lokation/Gericht) kein Ergebnis.
Gebe ich hingegen den Pfad nur mit Wildcards (z.B. //) an, so erhalte ich z.B. in der XmlNodeList alle "Lokation"-Knoten.
Auch bei Verwendung eines NamespaceManagers bei der Abfrage erhalte ich gleiche Resultate.
Welche Ursache könnte dies haben?
Viele Grüße
Ernstl
Hallo Abt,
du hast recht!
PS erstellt Files mit UCS-2 LE-BOM Kodierung
und die per touch.exe erstellte Datei ist UTF-8 kodiert.
Vielen Dank für den Tip
Viele Grüße
Bigeddie
Hallo Gemeinde,
wenn ich innerhalb der PowerShell mit
echo "*.dll" > .gitignore
ein .gitignorefile erstelle, so wird dieses anscheinend nicht gelesen oder seitens falsch verarbeitet.
Erstelle ich das gleiche File via
'C:\Program Files\Git\usr\bin\touch.exe' .gitignore
und bearbeite es mit Notepad, so werden keine DLL's gestaged.
Woran kann das liegen?
Vielen Dank und viele Grüße
Bigeddie
Hallo Abt,
etwa so?
var script = PowerShell.Create();
script.AddScript("Get-Service | ?{$_.Displayname -like 'SQL Server (SQLEXPRESS)'}|%{$_.start()}");
var output = script.Invoke();
var stateCheck = PowerShell.Create();
stateCheck.AddScript("Get-Service | ?{$_.Displayname -like 'SQL Server (SQLEXPRESS)'}");
var checkResult = stateCheck.Invoke();
ServiceController svcc = (checkResult[0].BaseObject) as ServiceController;
Console.WriteLine(svcc.Status);
while (svcc.Status != ServiceControllerStatus.Running)
{
checkResult = stateCheck.Invoke();
svcc = (checkResult[0].BaseObject) as ServiceController;
Console.WriteLine(svcc.Status);
}
Viele Grüße
Bigeddie
Hallo,
zur Zeit starte ich einen Service via Powershell.Invoke
var script = PowerShell.Create();
script.AddScript("Get-Service | ?{$_.Displayname -like 'SQL Server (SQLEXPRESS)'}|%{$_.start()}");
var output = script.Invoke();
Wie stelle ich jedoch fest, wann das Starten des Service erfolgt ist?
Viele Grüße
Bigeddie
Hallo MarsStein,
also dürfte es der beste Weg sein mit eigenen Parameter-Typen zu arbeiten, welche dann auch ihre eigenen Fehler habe können und eigene Unit-Tests haben sollten, oder liege ich da falsch?
Viele Grüße
bigeddie
Hallo,
also das mit der Überarbeitung für numerische Datentypen ist mir schon bekannt, wobei
@MarsStein: woher kommt der Type NumericField?
Wie verhält es sich jedoch sich jedoch mit 'sealed' Datentypen wie String (siehe Thread-Start) wäre dann nicht der Ansatz meines letzten Posts eine ebenso adequate Lösung?
Zum Thema "Designfehler" gibt es IMHO wahrscheinlich mehr als genug kommerziell vertriebene oder in irgendeiner Form publizierte Varianten.
Viele Grüße
bigeddie
@MarsStein: Sry zu spät mitbekommen, dass NumericField entfernt wurde.
Hallo Abt, malignate, weimat und LaTino,
ziehen eure Vorschläge nicht einen erheblichen Aufwand innerhalb des Konstruktors nach sich?
@LaTino: ich habe einen ähnlichen, aber etwas detaillierteren, Ansatz angedacht.
Wäre es nicht alternative und ohne Einhaltung irgendwelcher Coding-Rules effektiver etwas in folgender Form umzusetzen:
public class Koerper
{
#region privates
double volumen;
double gewicht;
double dichte;
#endregion
#region Constructors
public Koerper()
{
}
public Koerper(DichteUndVolumen dv)
{
dichte = dv.Dichte;
volumen = dv.Volument;
}
public Koerper(GewichtUndVolumen gv)
{
gewicht = gv.Gewicht;
volumen = gv.Volumen;
}
public Koerper(DichteUndGewicht dg)
{
dichte = dg.Dichte;
gewicht = dg.Gewicht;
}
#endregion
}
public class DichteUndGewicht
{
public double Dichte { get; set; }
public double Gewicht { get; set; }
public DichteUndGewicht(double d, double g)
{
Dichte = d;
Gewicht = g;
}
}
public class GewichtUndVolumen
{
public double Gewicht { get; set; }
public double Volumen { get; set; }
public GewichtUndVolumen(double g, double v )
{
Gewicht = g;
Volumen = v;
}
}
public class DichteUndVolumen
{
public double Dichte { get; set; }
public double Volument { get; set; }
public DichteUndVolumen(double d, double v)
{
Dichte = d;
Volument = v;
}
}
Nicht schön aber selten 😉
Viele Grüße
bigeddie
Hallo Abt,
wieso Designfehler?
Je nach Aufgabenstellung will ich ja nicht 10 Überladungen eines Konstruktors produzieren, wenn zwei komplett andere Member bei instanziieren betroffen sind?
Hallo Jamikus,
die Eigenschaften sind untrennbar miteinander verbunden und ich möchte nicht 2 Klassen erstellen, welche das gleiche beschreiben repräsentieren.
Ein Gegenstand lässt sich z.B. durch sein Volumen und sein Gewicht, aber auch über sein Volumen und seine Dichte oder sein Gewicht und seine Dichte beschreiben.
Viele Grüße
Ernst Jürgen
Hallo Gemeinde,
ich habe mal wieder eine Frage, deren Lösung vielleicht auch bei anderen so schon aufgetreten ist.
Ich möchte eine Klasse "blubber" ersten, welche 2 Konstruktoren mit quasi gleichen Signaturen aufweisen soll, wie
public class Blubber
{
public Blubber(string foo, string bar)
{
}
public Blubber(string flip, string flop)
{
}
}
was ja bekanntlich nicht funktioniert.
Die Erstellung eines eines neuen Types, welcher von string abgeleitet ist geht auch nicht, da string ja 'sealed' ist und der "Umweg" über 'using'
using flipstr = string;
using flopstr = string;
public class Blubber
{
public Blubber(string foo, string bar)
{
}
public Blubber(flipstr flip, flopstr flop)
{
}
}
schlägt ebenfalls fehl.
Gibt es dazu einen Workaround über welchen etwas derartiges darstellbar ist?
Viele Grüße
bigeddie
Hallo,
@LaTino
private bool isEven()
{
return currentValue % 2 == 1;
}
diesen Fehler habe ich vorsätzlich, in den ursprünglichen Code, eingebaut.
@all
Ich weiß, dass ich Nichts weiß!
Und deshalb frage ich und versuche auf viele Arten Antworten auf meine Fragen zu bekommen.
Ich habe es schon mehr als einmal erlebt, das ganze Projekte in die Tonne getreten wurden, weil Entwickler "IHREN"-Code bis aufs Blut "beschützt" haben und ein refactoring einer "2000 Zeilen"-Methode grundweg ausgeschlossen wurdeoder der Kollege das Unternehmen verlies und die Methode unwartbar war und der Auftrag oder der Release-Termin nicht haltbar war.
Bei meinen Recherchen bin ich unteranderem auf solche Vorgehensweisen wie
Viele Grüße
bigeddie
Hallo,
erstmal Dank für eure Response.
Einen Glaubenskrieg oder eine irgendwie anders geartete Auseinandersetzung wollte ich mit meiner Frage in keinester Weise vom Zaun brechen.
Mir drängt sich jedoch auch die Frage auf ob, wenn es ein Anforderung ist, dass eine Methode einen ganzzahligen Wert zurückliefern soll, es micht einen erheblichen Unterschied macht wie dieser Wert zustande gekommen ist.
Das Requirement ist zwar erfüllt (ganzzahligen Wert zurückliefern), aber wenn die Methode mir diesen Wert als 0xff liefert würde mich schon interessieren wie, wieso und warum.
Auch das Testen von Properties, von welchem ich gelesen habe, das man das "NIE" macht, würde ich immer vom Zweck des Property abhängig machen (Never say Never).
Ich habe jetzt für DEBUG, via Preprozessor, öffentliche Wrapper-Methoden erstellt, welche mir das testen einzelner MicroRequirements, wie z.B. die Richtigkeit einer Berechung sehr erleichtert.
Wie ich feststellen konnte, passiert es mir bei vielen kleinen Tests, welche auch "nicht public"-Methoden umfassen, nicht, dass ich "vorne eine Schraube löse und an einer anderen Stelle fällt ein Ohr ab.
Aber das kann ja jeder halten wie er will.
Viele Grüße und viel Spaß beim Coden
Ernst Jürgen
Hallo Gemeinde,
eine ganz allgemeine Frage: Wie granular sollen die Tests beim Unit-testen sein?
Hintergrund:
Bei einer kleinen Sessions haben wir eine Klasse zu Berechnungen mit dem Collatz-Algorithmus implemetiert:
static void Main(string[] args)
{
int currentValue;
int iterationscounter = 0;
Console.Write("Bitte geben Sie eine Nummer ein: ");
currentValue =Convert.ToInt32(Console.ReadLine());
while (currentValue!=1)
{
if (currentValue % 2 == 1) {
currentValue = currentValue * 3 + 1;
}
else
{
currentValue = currentValue / 2;
}
iterationscounter++;
}
Console.WriteLine("Es wurden "+iterationscounter+" Iterationen benötigt");
Console.ReadKey();
}
und wollten diesen Algorithmus testbar machen.
Aufgrund eines Tipfehlers schlugen die Tests jedoch immer fehl, weshalb wir für jeden einzelnen Schritt
a.) prüfen ob der momentane Wert grade ist
b.) den momentanen Wert halbieren
c.) den momentanen Wert mit 3 multplizieren und das Ergebnis um 1 erhöhen
d.) Arbeitsschritt: b. wenn der momentane Wert grade, sonst c
e.) wiederhole d. solange der momentane Wert !=1
in Methoden und Funktionen refaktorierten.
Die Anzahl der Wiederholungen wurde über ein Property zurückgeliefert, e. wurde als eine öffentliche Methode implementiert und der Test auf die Richitgkeit der Berechnung wurde gegen einem händisch ermittelten Wert für die Anzahl der Iterationen durchgeführt.
Die Klasse sah dann so aus:
public class Collatz
{
int currentValue;
int iterationsCounter = 0;
public int IterationCounter
{
get
{
return iterationsCounter;
}
}
public Collatz(int value)
{
currentValue = value;
}
private void shrink()
{
currentValue = currentValue / 2;
}
private void grow()
{
currentValue = currentValue * 3 + 1;
}
private bool isEven()
{
return currentValue % 2 == 1;
}
private void calculationStep()
{
if (isEven())
shrink();
else
grow();
}
public void work()
{
while (currentValue != 1)
{
calculationStep();
iterationsCounter++;
}
}
}
Sollten nicht alle Methoden, also auch die "privaten" testbar gemacht werden?
Z.B. durch durch Preprocessor Directives?
Viele Grüße
Ernst Jürgen
Hallo Khalid, FZelle,
auf dem Server ist kein Transactionlog aktiviert(nicht meine Zuständigkeit).
Ich muss einen Master- und viele Detail-Datensätze "gleichzeitig" abspeichern.
Um keine Inkonsistenzen in die Datenbank zu bringen will ich jedoch die Commands alle in eine Transaktion packen und einen Rollback durchführen sobald ein Fehler auftritt oder die Anzahl der betroffenen Zeilen(x) (Command.Execute x) gleich 0 (null nicht NULL) ist.
Viele Grüße
Jürgen
PS.
@ FZelle: Arbite nicht mit ADO.NET, sondern ADO2.8(OLEDB) unter VBA
verwendetes Datenbanksystem: <SqlServer2005>
Hallo Gemeinde,
wieviele Commands kann ich innerhalb einer Connection nach BeginTrans ausführen bevor ich ein Commit oder einen Rollback machen muss?
Vielen Dank und viele Grüße
Jürgen
Hallo Abt,
vielen Dank für den Austausch. Dieser war sehr aufschlussreich.
Viele Grüße
Jürgen
Hallo Abt,
der Aufruf soll in Form von
bla.exe -debug
erfolgen, um auch bei der releaseten Version auf einer anderen Datenquelle arbeiten zu können oder sich bestimmte Infos ausgeben lassen zu können. Als würde man mit "verbose" arbeiten.
Mit dem Zustand des Kompilates soll dies nichts zu tun haben.
Viele Grüße
Jürgen
Hallo Abt,
das mit der XSLT ist mir bereits bekannt gewesen, aber meine Aufgabe soll darin bestehen nur eine app.config zu haben und der "DEBUG" soll dann nur über ein Commandlineargument aktiviert warden, so dass man auch mit dem RC z.B. auf den Test-Server (SQL) zugreifen kann und nur eine Konfigurationsdatei benötigt.
Viele Grüße
Jürgen
Hallo Gemeinde,
eine kleine Frage:
Gibt es eine Möglichkeit innerhalb einer app.config-Datei sowohl DEBUG- als auch RELEASE-Informationen unter zu bringen, so dass nur eine Datei zu warten ist?
Viele Grüße
Jürgen
Hallo vbprogger,
genau auf diesen Link bezieht sich mein Poste.
Wechen Hotfix soll soll ich mir da zusenden lassen?
Viele Grüße
Jürgen
verwendetes Datenbanksystem: <SQL SERVER 2008 r2 Express>
Hallo Gemeinde,
seit dem letzten Update scheint der Dienst für den o.g. SQL-Server nichtmehr zu starten. Microsoft biete zwar einen Hotfix per Mail an, ich kann jedoch nicht nachvollziehen welchen ich da anfordern muss?
Kann mir von euch jemand weiterhelfen?
Viele Grüße
Jürgen
Hallo T-Virus,
also für den Import verwende ich EF5 (bin leider daran gebunden, obwohl mein eigener ActiveRecord - Ansatz nur ca 45% der Zeit beansprucht hat, ich jedoch die DB-Struktur, Constraints etc. selbst verwalten musste)
Die interne Struktur der Daten ist wie ein "Baum" mit 6 Ebenen aufgebaut. und ich hangel mich für jeden Datensatz durch diesen Baum.
Übrigens: ohne das abspeichern der Daten in der neuen DB beträgt der Zeitaufwand nur ca 10% des Gesamtzeitbedarfs.
Viele Grüße
Jürgen
Hi herbivore,
als das Projekt noch unter XP gefahren habe hatte ich immer einen SWAP von 2-3GB, welchen ich jetzt unter Win7 nicht habe und ich dachte die Performance würde darunter leiden.
Viele Grüße
Jürgen
Hallo Gemeinde,
habe, in der Hoffnung auf einen Performancegewinn, von XP auf Win7 umgestellt und den Arbeitsspeicher auf 16GB erweitert.
Bei dem Projekt werden Daten aus einer Datenbank gelesen und in aggregierter Form in eine neue Datenbank geschaufelt(SQL2008R2).
Beim Import ist jedoch keine Steigerung der Verarbeitungsgeschwindigkeit festzustellen.
Welche Ursachen kann es dafür geben?
Oder ist der SQL Server die Engstelle?
Viele Grüße
Jürgen
Hallo Abt,
erstmal vielen Dank für deine schnelle Antwort.
Auf etwas Ähnliches bin ich über mein Repository auch gekommen, nur habe ich die Auflage gemacht bekommen, dass ich immer die Server-Zeit nehmen soll und der Server ist leider auf die Zeitzone konfiguriert.
Dein Ansatz ist wesentlich eleganter als der meine, bringt mir jedoch leider nicht den Durchbruch.
Könnte ich vielleicht eine Klasse, welche von DbMigrations abgeleitet ist innerhalb der Seed-Methode instanziieren, welche das der entsprechenden Spalte den SqlDefault hinzufügt?
Viele Grüße
Jürgen
verwendetes Datenbanksystem: <SQL2ßß8Express & EF5>
Hallo Gemeinde,
ich möchte einer DATETIME Spalte, welche in meiner Klasse wie folgt aussieht
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime CreatedAt
{
get { return createdAt; }
}
einen Default-Wert über getdate() zuweisen lassen.
Den Initalizer der Datenbank hab ich schon mit
Database.SetInitializer(new MyDataInitializer());
gesetzt, und auch schon eine Klasse definiert
class MyBuildQualityReporterDataInitializer : DropCreateDatabaseAlways<DataContext>
{
}
nur wie kann ich jetzt das Feld so mit einem Constraint versehen, das dieser immer bei der Initialisierung verfügbar ist?
Viele Grüße
Jürgen
verwendetes Datenbanksystem: <SQL2008 Express/EF5>
Hallo Gemeinde,
ich möchte mehrere 1000 Datensätze in eine Tabelle via EF5 importieren und dabei die Aktualisierung des Index auf den PK bis zum Ende des Import deaktivieren, da die Geschwindigkeit anscheinend mit zunehmender Anzahl an Datensätzen sehr darunter leidet.
Geht das und wenn ja wie?
Viele Grüße
Jürgen
Hallo Abt,
ich verstehe den grauen Kommentar nicht ganz. Was ist damit gemein?
Viele Grüße
Jürgen
Hallo,
erstmal vielen Dank für eure Antworten.
Ich hatte bereits als ich mit EF anfing so meine Probleme (Doppelte Datensätze nacherstellen einer "Relation")
@FZelle: ActiveRecord scheint wie XPO von DevExpress zu funktionieren (XPO darf ich leider nicht verwenden). Wie wird das dann aber über den Context geregelt?
@Abt: Meinst Du damit, dass wenn ich den "Baum" erweitere und ich innerhalb eines Scope des Context "SaveChanges()" aufrufe, dass alle Änderungen automatisch übernommen werden?
Sry, bin leider im Umgang mit EF noch etwas clumsy 😄.
Viele Grüße
Jürgen
Hallo Abt,
ich habe eine Baumstruktur, bei welcher jede Ebene einen anderen Typ hat, also Stamm-Ast-Zweig-Blatt
Das Blatt weiß zu welchem Zweig es gehört und der Zweig kennt alle an ihm befindlichen Blätter. Dies setzt sich is zum Stamm equivalent durch. Jetzt übergebe ich dem "Stamm" einen Pfad zu einem Blatt, aber weder Zweig noch Blatt existieren und der entsprechende Ast soll dann den Zweig ergänzen und der Zweig das Blatt und alles soll dann wieder in der Datenbank abgelegt werden.
Wie kann ich das - ohne, dass das Blatt weis, dass es gespeichert ist und somit einen PK hat - realisieren?
Viele Grüße
Jürgen
verwendetes Datenbanksystem: <EF5 SQLServer2008>
Hallo Gemeinde,
kann ich einer persistierten Klasse (sie befindet sich im DbContext) die Verantwortung für die Speicherung ihres Daten übertragen, so dass ich beispielsweise einen Aufruf wie
testClass.Save()
machen kann?
Viele Grüße
Jürgen
Hallo Chilic,
meine Frage ist, ob dies eine übliche Vorgehensweise ist, oder ob ich mich in etwas verrenne was so niemand anwenden würde?
Viele Grüße
Jürgen
Hallo,
also ich hatte mir das etwa so vorgestellt:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
nullableTestClass test = new nullableTestClass();
if (test.Wert == null)
{
Console.WriteLine("NULL");
}
else
{
Console.WriteLine(test.Wert);
}
test.Wert = true;
Console.WriteLine(test.Wert);
test.Wert = false;
Console.WriteLine(test.Wert);
Console.ReadKey();
}
}
class nullableTestClass
{
private bool? wert;
public bool? Wert
{
get
{
return wert;
}
set
{
if (wert == null)
wert = value;
}
}
}
}
Solange 'Wert' NULL ist kann ihm ein Wert zugewiesen werden.
Hat jedoch eine Zuweisung stattgefunden, so kann dieser nicht mehr geändert werden.
Viele Grüße
Jürgen
Hallo Gemeinde,
ich möchte den Wert eines Member welcher auch in eine Datenbank persistiert wird einfrieren, also ihn keinesfalls seiten meines Programms ändern lassen.
Nun meine Frage:
wenn ich den Typ nullable mache, verriegele ich dann das Ändern des Member am besten über ein entsprechendes Property oder schreibe ich besser separate getter- und setter-Methoden?
Viele Grüße
Jürgen
Hallo Abt,
da der "Literatur" zu entnehmen ist, dass EF einen Literal vom Typ int, welcher die Zeichenkette "Id" enthält als PK und 'Identity' annimmt, dachte ich, dass eine Id immer solange 0 ist, solange das Objekt sich noch nicht in der DB befindet, weshalb ich beim Hinzufügen dadrauf prüfe, ob diese 0 ist.
Habe mittlerweile herausgefunden, dass, wenn ich innerhalb einer Klasse die Objekte man/woman 'private' deklariere und über einen separaten DbContext definiere, dass ich dann beim updaten/inserten von die Instanzen von man/woman erst wieder innerhalb der DbContext in welchem die Instanz der Klasse Pair in die Datenbank "geschrieben" werden soll mit den entsprechenden DbSets (Men/Women) mit attach "anbinden" muss um zuverhindern, dass diese erneut und somit als Dubletten in die DB eingefügt werden.
Bei der Instanziierung der Objekte innerhalb des selben DbContext ist dies nicht notwendig.
PS. Danke für die Links
Viele Grüße
Jürgen
Hallo Abt,
das ist momentan nur ein Prototype, da ich erst mit der Arbeit mit dem EF begonnen habe.
Der Code für das Hinzufügen des neuen Paares sieht also wie folgt aus:
using (var context = new FamilyContext())
{
if (pair.Id == 0) //sollte sich das Pair noch nicht in der DB befinden
{
Pairs.Add(pair); //Pairs -> DbSet<Pair>
SaveChanges();
}
else
{
DbEntityEntry entry = Entry(Pairs.Find(pair.Id));
entry.CurrentValues.SetValues(Pair);
SaveChanges();
}
}
Kann ich die beiden Objekte Man und Woman, welche bereits in der Datenbank sind entkoppeln?
Viele Grüße
Jürgen
verwendetes Datenbanksystem: <SQL 2008Express, EF5 und LINQ VS2010>
Hallo Gemeinde,
ich habe folgende Entities:
Public class Man
{
public int Id {get; set;}
public string Name {get; set;}
}
Public class Woman
{
public int Id {get; set;}
public string Name {get; set;}
}
Public class Pair
{
public int Id {get; set;}
public virtual Man Man {get; set;}
public virtual Woman Woman {get; set;}
}
nachdem ich nun eine neue Instanz von Pair erstellt haben und einen Mann und eine Frau übergeben und die Instanz von Pair an das entsprechende DbSet innerhalb des Context angefügt habe und mit 'SaveChanges' den Vorgang abgeschlossen habe erhalte ich doppelte Einträge für Man und Woman in den jeweiligen Tabellen der DB.
Welchen Fehler begehe ich hier und wie läßt sich dies verhindern.
Viele Grüße
Jürgen