EF - Table per Type Walkthrough - Probleme beim Update

17/04/2009 - 09:08 von Roland Schumacher | Report spam
Hallo

Von Problem zu Problem. :-)

Folgendes.
Ich habe im EF etwas in der Form hier modeliert. http://twurl.nl/ywiqpw

Es gibt eine abstract Basisklasse von der dann die spezialisierten
ableiten.

Geladen werden die Daten wie folgt. BewilligungCol ist die abstract
Basisklasse.
[...]
public AusnahmeBewilligungRLG GetById(Guid id)
{
var ausnahmeBewilligungRLG = m_context.BewilligungCol.Where(i => i is
AusnahmeBewilligungRLG && i.BewilligungID == id);

//Generiertes SQL ausgeben.
Trace.WriteLine(ausnahmeBewilligungRLG.ToTraceString());

return ausnahmeBewilligungRLG.First() as AusnahmeBewilligungRLG;
}
[...]

Hinzugefügt (das funktioniert):
[...]
public AusnahmeBewilligungRLG Add(AusnahmeBewilligungRLG item)
{
m_context.AddToBewilligungCol(item);

//Generiertes SQL ausgeben.
Trace.WriteLine(m_context.ToTraceString());

m_context.SaveChanges();

return GetAllById(item.BewilligungID);
}
[...]

Updaten (das will nicht):
[...]
public void Update(AusnahmeBewilligungRLG item)
{
m_context.Attach(item);

//Generiertes SQL ausgeben.
Trace.WriteLine(m_context.ToTraceString());

m_context.SaveChanges();
}
[...]

Es gibt aber keine Fehlermeldung. In der DB àndert sich aber nichts.

Beim Delete gibt es auch noch einen Fehler.
[...]
public void Delete(AusnahmeBewilligungRLG item)
{
m_context.DeleteObject(item);

//Generiertes SQL ausgeben.
Trace.WriteLine(m_context.ToTraceString());

m_context.SaveChanges();
}
[...]
Das Objekt kann nicht gelöscht werden, da es nicht im ObjectStateManager
gefunden wurde.

Ideen?

Gruss
Roland Schumacher alias GENiALi
http://blog.geniali.ch/
http://jotd.geniali.ch/
 

Lesen sie die antworten

#1 Roland Schumacher
17/04/2009 - 09:17 | Warnen spam
OK. Das löschen tut.

[...]
public void Delete(AusnahmeBewilligungRLG item)
{
AusnahmeBewilligungRLG aus = m_context.GetObjectByKey(item.EntityKey) as
AusnahmeBewilligungRLG;

m_context.DeleteObject(aus);

//Alle Objekte löschen

//Generiertes SQL ausgeben.
Trace.WriteLine(m_context.ToTraceString());

m_context.SaveChanges();
}
[...]

Einfach mit GetObjectByKey zuerst laden.

Das Updaten ist mir aber noch nicht klar.
Ich möchte ja nicht alle Propertys neu zuweisen.

Gruss
Roland Schumacher alias GENiALi
http://blog.geniali.ch/
http://jotd.geniali.ch/

Ähnliche fragen