Я использую пример с по этой ссылке для обновления таблиц базы данных в SQL Server 2008 в соответствии с шаблоном хранилища и единицей работы.
Пока у меня работает вставка.Я испытываю трудности с получением обновления и удалением рабочих.Обновление не выдает ошибки и не обновляет.Удаление дает InvalidOperationException, как это The object cannot be deleted because it was not found in the ObjectStateManager.
Для вставки и удаления я использую методы IObjectSet, как указано в примере.Для обновления я использую метод IObjectSet.Attach (entity), в который отправляю измененный объект.
Код для классов репозитория и единиц работы ниже:
Класс репозитория
пространство имен DataAccess {
public interface IGenericRepository<T>
where T : class
{
void AddRow(T entity);
void UpdateRow(T entity);
void Delete(T entity);
}
public abstract class GenericRepository<T> : IGenericRepository<T>
where T : class
{
protected IObjectSet<T> _objectSet;
public GenericRepository(ObjectContext Context)
{
_objectSet = Context.CreateObjectSet<T>();
}
public void AddRow(T entity)
{
_objectSet.AddObject(entity);
}
public void UpdateRow(T entity)
{
_objectSet.Attach(entity);
}
public void Delete(T entity)
{
_objectSet.DeleteObject(entity);
}
}
}
Класс единицы работы
namespace DataAccess
{
public interface IUnitOfWork
{
IGenericRepository<User> Users { get; }
void Commit();
}
public class UnitOfWork : IUnitOfWork
{
private readonly ObjectContext _context;
private UserRepository _userRepository;
public UnitOfWork(ObjectContext Context)
{
if (Context == null)
{
throw new ArgumentNullException("Context wasn't supplied");
}
_context = Context;
}
public void Commit()
{
_context.SaveChanges();
}
public IGenericRepository<User> Users
{
get
{
if (_userRepository == null)
{
_userRepository = new UserRepository(_context);
}
return _userRepository;
}
}
}
}
Наконец, вот как я использую его для обновления в своем телефонном коде
public void UpdateUser(UserData userData)
{
using (mEntities context = new mEntities())
{
UnitOfWork uow = new UnitOfWork(context);
User usr = new User(); //This is the Entity Framework class
usr.ID = userData.RowID;
usr.UserName = userData.Username; //usr.UserName is the primary key in the table
uow.Users.UpdateRow(usr);
uow.Commit();
}
}
Но обновление не происходит.Что я здесь не так делаю?Я использую VS2010 с EF 4
Спасибо за ваше время ...