nhibernate : a different object with the same identifier value was already associated with the sessi
- by frosty
I am getting the following error when i tried and save my "Company" entity in my mvc application
a different object with the same identifier value was already associated with the session: 2, of entity:
I am using an IOC container
private class EStoreDependencies : NinjectModule
    {
        public override void Load()
        {
            Bind<ICompanyRepository>().To<CompanyRepository>().WithConstructorArgument("session",
                                                                                       NHibernateHelper.OpenSession());
        }
    }
My CompanyRepository
public class CompanyRepository : ICompanyRepository
{
    private ISession _session;
    public CompanyRepository(ISession session)
    {
        _session = session;
    }    
    public void Update(Company company)
    {
        using (ITransaction transaction = _session.BeginTransaction())
        {
            _session.Update(company);
            transaction.Commit();
        }
    }
}
And Session Helper
public class NHibernateHelper
{
    private static ISessionFactory _sessionFactory; 
    const string SessionKey = "MySession";
    private static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
            {
                var configuration = new Configuration();
                configuration.Configure();
                configuration.AddAssembly(typeof(UserProfile).Assembly);
                configuration.SetProperty(NHibernate.Cfg.Environment.ConnectionStringName,
                                          System.Environment.MachineName);
                _sessionFactory = configuration.BuildSessionFactory();
            }
            return _sessionFactory;
        }
    }
    public static ISession OpenSession()
    {
        var context = HttpContext.Current;
        //.GetCurrentSession()
        if (context != null && context.Items.Contains(SessionKey))
        {
            //Return already open ISession
            return (ISession)context.Items[SessionKey];
        }
        else
        {
            //Create new ISession and store in HttpContext
            var newSession = SessionFactory.OpenSession();
            if (context != null)
                context.Items[SessionKey] = newSession;
            return newSession;
        }
    }
}
My MVC Action
    [HttpPost]
    public ActionResult Edit(EStore.Domain.Model.Company company)
    {
            if (company.Id > 0)
            {
                _companyRepository.Update(company);
                _statusResponses.Add(StatusResponseHelper.Create(Constants
                    .RecordUpdated(), StatusResponseLookup.Success));
            }
            else
            {
                company.CreatedByUserId = currentUserId;
               _companyRepository.Add(company);
            }
        var viewModel = EditViewModel(company.Id, _statusResponses);
        return View("Edit", viewModel);
    }