Laden...

EF ID Placeholder vor dem Insert

Erstellt von Diräkt vor 12 Jahren Letzter Beitrag vor 12 Jahren 1.564 Views
D
Diräkt Themenstarter:in
615 Beiträge seit 2009
vor 12 Jahren
EF ID Placeholder vor dem Insert

verwendetes Datenbanksystem: <SQL 2008 R2, EF 4>

Hallo Leute

Folgende Frage

Gibt es eine Möglichkeit eine Art PlaceHolder zu verwenden, welcher beim Insert durch den auto-generierten (increment) PK ersetzt wird ?

Szenario

(PK) ID : 100
(string?) Formel : 101*102
(double?) Value = NULL

(PK) ID : 101
(string?) Formel : NULL
(double?)Value = 10

(PK) ID : 102
(string?)Formel : NULL
(double?)Value = 10

Wenn ich nun diese 3 Objekte kopieren will, muss das Formel-Property (string) nun aktualisiert werden, sodass es das Neue ID - Property referenziert.

Da ich dies auch serialisieren will, sodass man es später import/exportieren kann, wäre es also am aller besten für mich, wenn es eine Möglichkeit geben würde, den neu generierten PK Wert "referenzieren" zu können.

(ja normal bekommt man diesen ja erst nach dem Insert, wenn ich aber 200 Einträge kopiere, dann 200 inserts und 200 updates zu feuern, klingt nicht sehr intelligent.)

Hat mir jemand ein Tipp ? Eine Idee ?

Besten Dank und beste Grüsse

Diräkt

G
538 Beiträge seit 2008
vor 12 Jahren

Vielleicht musst du die Formel anders aufbauen - dann kannst du einfach per Navigationseigenschaft arbeiten:

3 Felder: left, right, operator

Alternativ kannst du natürlich auch deine partielle EF-Klasse erweitern um eben die 3 Felder oben und dann Formel vor dem Speichern aus den 3 Feldern erzeugen.

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

D
Diräkt Themenstarter:in
615 Beiträge seit 2009
vor 12 Jahren

Hallo Grumbler85

Besten Dank für Deine Antwort.

Klingt schonmal sehr interessant, nur wie sieht das aus, wenn die "anzahl Felder" nicht definiert ist ?
(left, right, operator) es könnte auch so aussehen : 101102103+104^105

Das Ganze durch Navigations-Eigenschaften aufzubauen mit den Spalten :
ReferenceID , IsOperator
wäre doch auch etwas übertrieben ?! (unendliche joins ....)

Beste Grüsse

Diräkt

G
538 Beiträge seit 2008
vor 12 Jahren

Naja - joinen musst du eigentlich immer nur 3 Felder (man kann ja jede Operation entsprechend zerlegen) - das Problem ist wohl a) die Auswertungsreihenfolge und b) die Rekursionstiefe bei diesem Vorgehen ...

Was hast du denn am Ende damit vor?

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)

D
Diräkt Themenstarter:in
615 Beiträge seit 2009
vor 12 Jahren

Hallo Grumbler85

Das ist eine Tabelle mit "Rechnungen", welche zur Laufzeit durch ein Mathe-Parser gejagt werden.

Mein Ziel ist es, die Daten (trotz Abhängigkeit (Child, Parent, FormelValue)) exportieren zu können nach XML. Danach wieder einfügen....

Ich habe dies bereits umgesetzt jedoch absolut hässlich :
=> XML Analysieren
=> Datensätze in SQL Server schreiben
=> Alle geschriebenen Datensätze nun manipulieren (ChildID, ParentID, FormelValue)

Das manipulieren kann erst nach dem Insert passieren, da ich keine Möglichkeit gefunden habe den PK (increment) vor dem Insert zu bekommen.

Nun suche ich also nach einer besseren Lösung für mein Problem 😉

Beste Grüsse

Diräkt

Edit :

Absoult hässlich weil ich zuerst X inserts mache, danach X updates hinterher feuern muss.....

G
538 Beiträge seit 2008
vor 12 Jahren

Vielleicht hilft dir statt PK mit auto-increment ein GUID (uniqueidentifier in SQL) der bleibt bestehen - ABER der belegt halt auch deutlich mehr raum (falls das relevant sein sollte)

Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)