aktualisieren Ich habe eine generische Repository Klasseeine Entität
public class Repository<T>
where T : class
{
AccountingEntities ctx = new AccountingEntities();
public T Add(T entity)
{
ctx.Set<T>().Add(entity);
SaveChanges();
return entity;
}
public T Update(T entity, int id)
{
T existing = ctx.Set<T>().Find(id);
if (existing != null)
{
ctx.Entry(existing).CurrentValues.SetValues(entity);
SaveChanges();
}
return existing;
}
public T GetSingle(Expression<Func<T, bool>> filter)
{
var query = ctx.Set<T>().AsNoTracking().Where(filter).FirstOrDefault();
return query;
}
private void SaveChanges()
{
ctx.SaveChanges();
}
}
und ich habe zwei Tabellenelement und eine Bank. Und jede Bank kann mehrere Artikel haben.
Ich habe zwei Schaltflächen hinzufügen und bearbeiten und ein globales Repository in meiner Form.
Wenn ich Formular öffnen und Daten füllen und fügen klicken so wird Datensatz speichern und jede
Sache ist in Ordnung, aber zu dieser Zeit, als ich bearbeiten klicken, wird es sein Fehler lassen sehen die
meine bearbeiten Button-Code:
private void _btnEdit_Click(object sender, EventArgs e)
{
var item = repository.GetSingle(i => i.Id == id);
// here i update property of item
item = repository.Update(item, item.Id);
// here i get updated item
}
mein Problem ist, dass bei dieser Codezeile
var item = repository.GetSingle(i => i.Id == id);
, wenn ich Einzelteil erhalten, ist es Navigationseigenschaft (hier Bank juristische Person)
gefüllt ist, aber bei dieser Codezeile
item = repository.Update(item, item.Id);
Wenn ich Artikel aktualisieren und bekommen es, es Navigationseigenschaft ist (Bank) ist null
und ich kann Artikel nicht verwenden. Bank, weil es null ist.
Schließlich begriff ich, wo ist Problem, das ich globale Repository Methode
Repository<Item> repository = new Repository<Item>();
und Verwendung Repository in hinzufügen und bearbeiten, erstellt. Und wenn ich erstellt
separates Repository in jedem hinzuzufügen und zu bearbeiten Methode funktioniert es gut
Ich möchte wissen, warum dies geschehen?
finden Warum Sie verwenden 'item = repository.Update (item, itemId) ; '? Sie ordnen dem Objekt "item" in dieser Zeile etwas zu? Ich glaube, Sie müssen nur 'repository.Update (item, itemId);' – Vahx