public class Hardware
{
public int id { get; set; }
public int Nodes { get; set; }
public int Repeaters { get; set; }
public int Hubs { get; set; }
}
public abstract class Repositories<T> where T:class
{
//where T:class fixes the issue with .SET
//Repository class constructor once initialized will instantiate datamodel
//Manufacturing data model instantiate because it models table
ManufacturingDataModel MDM;
public Repositories(ManufacturingDataModel mdm)
{
MDM = mdm;
}
public List<T> GetHardware()
{
//Creating new list and adding data from db in it
List<T> data = new List<T>();
foreach(var i in MDM.Set<T>())
{
data.Add(i);
}
return data;
}
public void AddHardware(T item)
{
MDM.Set<T>().Add(item);
MDM.SaveChanges();
}
public void RemoveHardware(T item)
{
MDM.Set<T>().Remove(item);
MDM.SaveChanges();
}
public void UpdateHardware(T item)
{
MDM.Set<T>().AddOrUpdate(item);
MDM.SaveChanges();
}
public class Test : Repositories<Hardware>
{
public Test(ManufacturingDataModel mdm) : base(mdm)
{
}
static void Main(string[] args)
{
ManufacturingDataModel MDM = new ManufacturingDataModel();
Test t = new Test(MDM);
Hardware hardware = new Hardware();
hardware.Nodes = 55;
hardware.Repeaters = 46;
hardware.Hubs = 82;
t.AddHardware(hardware); // WORKS
t.RemoveHardware(hardware); //DOES NOT WORK
Repository entfernen Methode nicht funktioniert - Objekt nicht
finde ich versuche, ein funktionierendes Repository zu machen Elemente aus meiner db Tabelle hinzufügen/entfernen. Das Problem, mit dem ich konfrontiert bin, ist, dass die add-Methode perfekt funktioniert, die Entfernung aber nicht. Das Problem mit der Methode remove wie im Bild gezeigt ist, dass das Objekt nicht existiert. Ich habe verschiedene Dinge ausprobiert, wie zum Beispiel meine remove-Methode zu DeleteObject und Attach ändern, aber nichts scheint zu funktionieren. Irgendwelche Ideen? ADO -> Code zuerst -> EF -> Repo Klasse
In Ihrem Szenario, wenn wir "item.Id" Informationen haben, müssen wir die Entität nicht erneut abfragen. Es trifft die Datenbank zweimal. – lucky
Wie Sie hier lesen können https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.remove(v=vs.113).aspx, Die 'Remove' * Markiert die angegebene Entität So gelöscht, dass es beim Aufruf von SaveChanges aus der Datenbank gelöscht wird. ** Beachten Sie, dass die Entität vor dem Aufruf dieser Methode im Kontext ** in einem anderen Status vorhanden sein muss. * Wenn jemand das Löschen eines Elements anfordert, steht dies normalerweise nicht im Kontext. Deshalb habe ich das gesagt und deshalb sehe das OP diesen Fehler. – Christos
Ja, Sie haben Recht. Wir müssen die Entität anfügen, damit sie im Kontext existiert, bevor wir versuchen, sie zu löschen. Ich habe meine Antwort aktualisiert. – lucky