Laden...

Linq Update Tabellen mit Beziehungen

Erstellt von Hacky vor 11 Jahren Letzter Beitrag vor 11 Jahren 974 Views
H
Hacky Themenstarter:in
22 Beiträge seit 2012
vor 11 Jahren
Linq Update Tabellen mit Beziehungen

Hallo, ich benutze Linq um meine Daten abzulegen. Soweit funktioniert auch alles, bloß nun habe ich kompliziertere Beziehungen zwischen Tabellen. Ich möchte eigentlich nur ein update auf einer Tabelle verüben. Doch ich bekomme eine Exception wenn ich "db.SubmitChanges();" aufrufe:

"A first chance exception of type 'System.InvalidOperationException' occurred in System.Data.Linq.dll
at System.Data.Linq.ChangeTracker.StandardChangeTracker.StandardTrackedObject.SynchDependentData()
at System.Data.Linq.ChangeProcessor.ValidateAll(IEnumerable`1 list)
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
"

Ich vermute mal Linq passt es nicht wie ich das jeweilige DB Object benutze. Meine Frage ist wie ich das Richtig mache wenn ich ein Spalte Update die folge Beziehungen hat ?

momentan hole ich mir so den Datensatz den ich suche:


var data = (from c in db.Marchouts
                                where c.id.Equals(oldMarchout.Id)
                                select c).ToList();


Danach überschreibe ich das Object z.B.


data.marchout_bezeichnung = marchOutModel.Description;
.
.
.

EntitySet<MarchoutVehicle> marchoutVehicle = new EntitySet<MarchoutVehicle>();
                        foreach (var vehicle in marchOutModel.AlarmKeywordList.ToList())
                        {
                            MarchoutVehicle mv = new MarchoutVehicle();
                            mv.vehicle_id = vehicle.Id;
                            mv.marchout_id = data.id;
                            marchoutVehicle.Add(mv);
                        }
                        data.MarchoutVehicles = marchoutVehicle;


Ich glaub ihm passt es nicht das ich data.MarchoutVehicles "überschreibe" ... Bin mir aber nicht sicher ? Kann mir wer etwas dazu sagen wie es richtig geht ?

mit freundlichen Grüßen Hacky

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo Hacky

Du schreibst :

var data = (from c in db.Marchouts
where c.id.Equals(oldMarchout.Id)
select c).ToList();

data.marchout_bezeichnung = marchOutModel.Description;

Die Liste hat ein Property namens marchout_bezeichnung ? 😉

Das Selbe hier :


data.MarchoutVehicles = marchoutVehicle;

Versuch es etwa so :



foreach (var vehicle in marchOutModel.AlarmKeywordList.ToList())
                        {
                            MarchoutVehicle mv = new MarchoutVehicle();
                            mv.vehicle_id = vehicle.Id;
                            mv.marchout_id = data.id;
                            db.MachoutVehicle.Add(mv);
                        }
                            db.SaveChanges();

(Ich glaub du benutzt Linq2Sql, da heisst es ein wenig anderst, z.B SubmitChanges ...)

Beste Grüsse

Diräkt

H
Hacky Themenstarter:in
22 Beiträge seit 2012
vor 11 Jahren

Ich weiß die die Benennung meiner DB cloums lassen zu wünschen übrig xD Hmm irgendwie gefällt mir Linq2Sql nicht so was gibt es da noch so für alternativen ?!

Gruß Hacky

D
615 Beiträge seit 2009
vor 11 Jahren

Hallo Hacky

Schau Dir das Entity Framework an , es gäbe auch noch NHibernate.

Ich empfehle Dir das Entity Framework, da Linq2Sql nicht mehr weiter-entwickelt wird, auch basiert das EF auf 3 Schichten, was Linq2Sql nicht behaupten kann.

Beste Grüsse

Diräkt

H
Hacky Themenstarter:in
22 Beiträge seit 2012
vor 11 Jahren

danke =)

Gruß Hacky