Laden...
B
bigeddie myCSharp.de - Member
Chemielaborant Mannheim Dabei seit 02.07.2007 372 Beiträge
Benutzerbeschreibung

Forenbeiträge von bigeddie Ingesamt 372 Beiträge

26.07.2022 - 11:30 Uhr

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

26.07.2022 - 09:40 Uhr

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

25.07.2022 - 16:51 Uhr

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

  • männlich
  • weiblich
  • divers

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

  • warum ist die Column nicht nullable?
  • wie muss ich das Feld in der Configuration bearbeiten um sie nullable zu bekommen?
  • wie kann ich der Spalte einen DEFAULT-Wert zuweisen?

Viele Grüße

Bigeddie

16.09.2020 - 08:14 Uhr

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

15.09.2020 - 14:17 Uhr

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

15.09.2020 - 13:00 Uhr

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

10.06.2020 - 07:19 Uhr

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:

  1. Wie rufe ich die SP an effektivsten mit EF 6 auf?
  2. Wie übernehme ich die Datensätze die mit die Ausführung zurückgeliefert werden?

Vielen Dank

Bigeddie

12.02.2020 - 20:41 Uhr

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

11.02.2020 - 17:04 Uhr

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

10.02.2020 - 00:13 Uhr

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

22.10.2019 - 11:46 Uhr

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

29.03.2018 - 16:50 Uhr

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

29.03.2018 - 16:36 Uhr

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

19.02.2018 - 12:20 Uhr

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

19.02.2018 - 11:44 Uhr

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

29.07.2016 - 12:37 Uhr

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

29.07.2016 - 11:51 Uhr

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.

29.07.2016 - 09:58 Uhr

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

29.07.2016 - 08:43 Uhr

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

29.07.2016 - 08:27 Uhr

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

27.08.2015 - 01:21 Uhr

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

  • Reflektion bis zu privaten Membern
  • Testen im gleichen Namespace oder package mit komplett "private" freien Klassen
    und ähnliche Auswüchse gestoßen und überall wurden diese Wege als die einzig glückseelig machenden beschrieben.
    Ich werde für mich auf jeden Fall die Prüfung der Richtigkeit von z.B. Berechungen innerhalb einer Klasse als Microrequiement definieren und nach Wegen suchen wie ich diese Requirements als erfüllt und done abhaken kann.

Viele Grüße

bigeddie

26.08.2015 - 01:33 Uhr

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

25.08.2015 - 21:30 Uhr

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

10.11.2014 - 13:23 Uhr

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

10.11.2014 - 10:07 Uhr

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

30.07.2014 - 13:43 Uhr

Hallo Abt,

vielen Dank für den Austausch. Dieser war sehr aufschlussreich.

Viele Grüße

Jürgen

30.07.2014 - 12:32 Uhr

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

29.07.2014 - 13:06 Uhr

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

29.07.2014 - 11:31 Uhr

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

12.01.2014 - 22:52 Uhr

Hallo vbprogger,

genau auf diesen Link bezieht sich mein Poste.

Wechen Hotfix soll soll ich mir da zusenden lassen?

Viele Grüße

Jürgen

08.01.2014 - 19:05 Uhr

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

04.07.2013 - 12:39 Uhr

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

04.07.2013 - 12:06 Uhr

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

04.07.2013 - 11:47 Uhr

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

24.04.2013 - 16:06 Uhr

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

24.04.2013 - 15:49 Uhr

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

22.04.2013 - 15:53 Uhr

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

05.04.2013 - 15:01 Uhr

Hallo Abt,

ich verstehe den grauen Kommentar nicht ganz. Was ist damit gemein?

Viele Grüße

Jürgen

05.04.2013 - 14:50 Uhr

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

05.04.2013 - 13:36 Uhr

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

05.04.2013 - 13:08 Uhr

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

28.03.2013 - 21:08 Uhr

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

28.03.2013 - 20:20 Uhr

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

28.03.2013 - 13:59 Uhr

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

26.02.2013 - 00:52 Uhr

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

25.02.2013 - 23:42 Uhr

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

25.02.2013 - 23:21 Uhr

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

25.02.2013 - 23:06 Uhr

Hallo und vielen Dank für eure Posts, hat mir sehr geholfen.

Viele Grüße

Jürgen

25.02.2013 - 10:12 Uhr

verwendetes Datenbanksystem: <SQL 2008Express, EF5 und LINQ VS2010>

Hallo Gemeinde,

das unten genannte Beispiel soll keinerlei Anspielung sein.

Habe folgende grobe Struktur:


public Class Pair
{
    int id;
    Mann man;
    Frau woman;
}

Ich möchte zwei Listboxen füllen,

die erste soll eine Liste der Frauen enthalten, welche nich keine "Beziehung" zu dem gewählten Mann hatte und die zweite soll die Frauen enthalten, welche bereits eine "Beziehung" zu dem gewählten Mann hatte.
Wie schließe ich jetzt aus, dass ich in beiden Listboxen die selben Frauen genannt bekomme?

Viele Grüße

Jürgen

04.02.2013 - 15:18 Uhr

verwendetes Datenbanksystem: <SQLEXPRESS & EF5>

Hallo Gemeinde,

habe zwar herausgefunden wie ich den DefaultValue einer Datetime-Spalte per Migration definieren kann


AddColumn("dbo.tests", "td2", c => c.DateTime(nullable: false, defaultValueSql:"getdate()"));

und dass die Property das Attribute


[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Computed)]

haben muss, aber wie kann ich während der Definition der Klasse festlegen, dass


getdate()

der DefaultValue der Spalte sein soll?

Viele Grüße

Jürgen