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
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
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
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