Die Datenbank wird mit der Attach-Methode nicht aktualisiert
Ich versuche LINQ to SQL zu lernen. Ich habe die Einfügemethode erfolgreich implementiert und die Daten werden in die Datenbank eingefügt. Wenn ich versuche, die vorhandenen Daten zu aktualisieren, werden sie nicht in die Datenbank übernommen, obwohl es keine Ausnahme gibt. Können Sie bitte etwas Licht auf das werfen, was schief gelaufen sein könnte?
Hinweis: AccountNumber ist der Primärschlüssel
BEARBEITEN
Wenn Sie den Codezeilen folgen, funktioniert es. Aber kannst du das erklären?warum brauchen wir eine Auffrischung?
accountRepository.UpdateChangesByAttach(acc1);
accountRepository.RefreshEntity(acc1);
accountRepository.SubmitChanges();
Hinweis:
DataContext.Refresh method refreshes object state by using data in the database.
Die Aktualisierung wurde mit der Option KeepCurrentValues durchgeführt. Ich verstehe, dass die Werte, die ich im Entitätsobjekt aktualisiert habe, beibehalten werden. Ich liefere (nur) die erforderlichen Informationen, die in der Datenbank aktualisiert werden müssen. Ist diese Aktualisierung erforderlich?die restlichen Spaltenwerte erhalten?
Klient
using (var context = new RepositoryLayer.LibraryManagementClassesDataContext(connectionstring))
{
context.Log = Console.Out;
RepositoryLayer.Repository<RepositoryLayer.Account> selectedRepository = new RepositoryLayer.Repository<RepositoryLayer.Account>();
//selectedRepository.Context = context;
AccountBusiness accountBl = new AccountBusiness(selectedRepository);
//Transaction 1
//List<RepositoryLayer.Account> accountList = accountBl.GetAllAccounts();
//Transaction 2
//accountBl.InsertAccounts();
//Transaction3
accountBl.UpdateAccounts();
}
Geschäftsschicht
public void InsertAccounts()
{
RepositoryLayer.Account acc1 = new RepositoryLayer.Account();
acc1.AccountNumber = 4;
acc1.AccountType = "Contract";
acc1.Duration = 6;
accountRepository.InsertOnSubmit(acc1);
accountRepository.SubmitChanges();
}
public void UpdateAccounts()
{
RepositoryLayer.Account acc1 = new RepositoryLayer.Account();
acc1.AccountNumber = 4;
acc1.AccountType = "TEST";
acc1.Duration = 10;
accountRepository.UpdateChangesByAttach(acc1);
accountRepository.SubmitChanges();
}
Repository
public class Repository<T> : IRepository<T> where T : class
{
public System.Data.Linq.DataContext Context
{
get;
set;
}
public virtual System.Data.Linq.ITable GetTable()
{
return Context.GetTable<T>();
}
public virtual void InsertOnSubmit(T entity)
{
GetTable().InsertOnSubmit(entity);
}
public virtual void UpdateChangesByAttach(T entity)
{
GetTable().Attach(entity);
}
public virtual void SubmitChanges()
{
Context.SubmitChanges();
}
public virtual void RefreshEntity(T entity)
{
Context.Refresh(System.Data.Linq.RefreshMode.KeepCurrentValues, entity);
}
}
LESEN
LINQ to SQL: Aktualisierung ohne Aktualisierung bei "UpdateCheck = Never"
Linq To SQL-Entitätsobjekt anhängen / aktualisieren
Was macht LINQ-to-SQL-Tabelle <T> .Attach?
Wie kann ich alle Änderungen in einem Linq to SQL DataContext ablehnen?