Я создал очень простое приложение MVC3, чтобы сделать небольшую демонстрацию, но я работаю с проблемой;Я возвращаю сущность в свое представление, редактирую ее и затем публикую обратно, но в этом процессе моя сущность теряет свои возможности отслеживания изменений.Когда я возвращаю сущность в свое представление, это все еще прокси-класс структуры сущности, но когда он возвращается из моего представления, это класс «Person» (сущность называется person).
Вот мой класс хранилища:
public class PersonRepository : IPersonRepository
{
public EfContext Uow { get; set; }
public PersonRepository(IUnitOfWork uow)
{
Uow = uow as EfContext;
}
// yada yada yada
public void Add(Person person)
{
Uow.Persons.Add(person);
}
}
Эта сущность отправлена на мой взгляд в простой форме, созданной с помощью Html.EditorForModel.После этого я отправляю его обратно к этому методу:
[HttpPost]
public ActionResult Edit(Person person)
{
if (ModelState.IsValid)
{
_personRepository.Add(person);
_personRepository.Uow.Commit();
return RedirectToAction("Index");
}
return View(person);
}
И тада, это уже не отслеживаемый прокси-класс.Это приводит к нарушению первичного ключа, потому что структура сущностей пытается добавить мой объект как новый объект, где я просто хочу, чтобы структура сущностей обнаружила изменения и вместо этого создала оператор обновления.О, кстати, метод Commit в коде выше просто вызывает SaveChanges (), вот класс:
public class EfContext : DbContext, IUnitOfWork
{
public DbSet<Account> Accounts { get; set; }
public DbSet<Person> Persons { get; set; }
public void Commit()
{
SaveChanges();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
Кстати, это мой класс сущности:
public class Person
{
[HiddenInput(DisplayValue = false)]
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Account> Accounts { get; set; }
}
Кто-нибудь знает, как это исправить?У меня это работало раньше, насколько я помню, я просто не знаю, как.
Заранее спасибо!