Я создал веб-приложение, используя ASP.Net MVC 3 и EF 4.1, и я использую шаблон UnitOfWork, но ничего не фиксируется в базе данных. Все это довольно ново для меня, и я не знаю, с чего начать, чтобы решить эту проблему.
Я опирался на этот пост, чтобы создать свое веб-приложение:
http://weblogs.asp.net/shijuvarghese/archive/2011/01/06/developing-web-apps-using-asp-net-mvc-3-razor-and-ef-code-first-part-1.aspx
Окончательный код, который можно получить здесь также имеет сервисный уровень, и UnitOfWOrk внедряется в сервисы.
Вместо использования собственного инжектора на основе Unity 2, как в этом проекте, я использую Unity.Mvc3.
Вот мой класс IUnitOfWork:
public interface IUnitOfWork
{
void Commit();
}
А вот мой класс UnitOfWork:
public class UnitOfWork : IUnitOfWork
{
private readonly IDatabaseFactory databaseFactory;
private MyProjectContext dataContext;
public UnitOfWork(IDatabaseFactory databaseFactory)
{
this.databaseFactory = databaseFactory;
}
protected MyProjectContext DataContext
{
get { return dataContext ?? (dataContext = databaseFactory.Get()); }
}
public void Commit()
{
DataContext.Commit();
}
}
А вот как выглядит один из моих классов обслуживания:
public class RegionService : IRegionService
{
private readonly IRegionRepository regionRepository;
private readonly IUnitOfWork unitOfWork;
public RegionService(IRegionRepository regionRepository, IUnitOfWork unitOfWork)
{
this.regionRepository = regionRepository;
this.unitOfWork = unitOfWork;
}
...
}
При запуске мой компонент UnitOfWork регистрируется так:
container.RegisterType<IUnitOfWork, UnitOfWork>();
Теперь, независимо от того, пытаюсь ли я вставить, обновить или удалить, запрос в базу данных не отправляется. Что мне здесь не хватает?
UPDATE
Вот содержимое DataContext.Commit ():
public class MyProjectContext : DbContext
{
public DbSet<Region> Regions { get; set; }
public virtual void Commit()
{
base.SaveChanges();
}
}
А вот и база данныхFactory.Get ():
public interface IDatabaseFactory : IDisposable
{
MyProjectContext Get();
}
ОБНОВЛЕНИЕ № 2:
Используя отладчик, я замечаю, что мои сервисы Region и конструкторы контроллера вызываются один раз при выполнении только выбора, но они вызываются дважды при обновлении. Это нормально?