I want to update M:N data but when I do that I have this exception:
Initializing[DataAccess.Model.Product#6]-Illegally attempted to associate a proxy with two open Sessions
I think it is something with my sesion code but cant figure it out can you help me?
Here is a code of update session
public void Update(T entity)
{
    using (ITransaction transaction = Session.BeginTransaction())
    {
        Session.Update(entity);
        transaction.Commit();
    }
}
This is how the method looks like in controller
[HttpPost]
public ActionResult Add(int product)
{
    Create();
    Product productD = new ProductDao().GetById(product);
    ProductsOfBag productsOfBag = new ProductsOfBag();
    User user = new UserDao().GetByLogin(User.Identity.Name);
    Bag bag = new BagDao().GetByUser(user);
    bag.Price += productD.Price;
    bag.PriceDph += productD.PriceDph;
    bag.NumberOfItems++;
    ProductsOfBagDao productsOfBagDao = new ProductsOfBagDao();
    productsOfBag.IdBag = bag;
    productsOfBag.IdProduct = productD;
    productsOfBagDao.Create(productsOfBag);
    IList<ProductsOfBag> products = productsOfBagDao.GetByBag(bag);
    productD.Bags = products;
    bag.Products = products;
    BagDao bagDao = new BagDao();
    bagDao.Update(bag);
    return RedirectToAction("Index", "Home");
}
Product.hbm.xml
<class name="Product" table="Products" lazy="true">
    <id name="Id" column="id_product">
      <generator class="native" />
    </id>
    <property name="Name" column="name" />
    <property name="PriceDph" column="priceDph" />
    <property name="Price" column="price" />
    <property name="ProductState" column="productState" />
    <property name="Maker" column="maker" />
    <property name="Description" column="description" />
    <property name="ProductWaranty" column="productWaranty" />
    <property name="Points" column="points" />
    <many-to-one name="Category" column="id_category" foreign-key="id_category" />
    <property name="ImageName" column="imageName" />
    <bag name="Bags" lazy="true"
       inverse="true" batch-size="25" cascade="all-delete-orphan">
      <key column="id_product" />
      <one-to-many class="ProductsOfBag" />
    </bag>
</class>
Bag.hbm.xml
<class name="Bag" table="Bags" lazy="true">
    <id name="Id" column="id_bag">
      <generator class="native" />
    </id>
    <property name="Price" column="price" />
    <property name="PriceDph" column="priceDph" />
    <property name="NumberOfItems" column="numberOfItems" />
    <many-to-one name="IdUser" column="id_User" foreign-key="id_User" />
    <bag name="Products" lazy="true" 
       inverse="true" batch-size="25" cascade="all-delete-orphan">
      <key column="id_bag" />
      <one-to-many class="ProductsOfBag" />
    </bag>
</class>
Product.cs
public class Product : IEntity
{
    public virtual int Id { get; set; }
    [Required(ErrorMessage = "Název produktu je vyžadován")]
    public virtual string Name { get; set; }
    private double _priceDph;
    public virtual double PriceDph
    {
        get
        {
            _priceDph = Price + Price*0.21;
            return _priceDph;
        }
        set { _priceDph = value; }
    }
    [Required(ErrorMessage = "Cena je vyžadována")]
    [Range(0, 9000000, ErrorMessage = "Cena nemůže být záporná")] 
    public virtual int Price { get; set; }
    public virtual string ProductState { get; set; }
    [Required(ErrorMessage = "Výrobce je vyžadován")]
    public virtual string Maker { get; set; }
    [AllowHtml]
    public virtual string Description { get; set; }
    [Required(ErrorMessage = "Záruka je vyžadována")]
    public virtual int ProductWaranty { get; set; }
    [Required(ErrorMessage = "Počet bodů je vyžadován")] 
    private int _points;
    public virtual int Points
    {
        get
        {
            _points = (int)PriceDph/10;
            return _points;
        }
        set { _points = value; }
    }
    public virtual ProductCategory Category { get; set; }
    public virtual string ImageName { get; set; }
    public virtual IList<ProductsOfBag> Bags { get; set; }
}
Bag.cs
public class Bag :IEntity
{
    public virtual int Id { get; set; }
    public virtual double Price { get; set; }
    public virtual double PriceDph { get; set; }
    public virtual int NumberOfItems { get; set; }
    public virtual User IdUser { get; set; }
    public virtual IList<ProductsOfBag> Products { get; set; }     
}
NHibernateHelper.cs
public class NHibernateHelper
{
    private static ISessionFactory _factory;
    public static ISession Session
    {
        get
        {
            if (_factory == null)
            {
                var cfg = new Configuration();
                _factory =
                    cfg.Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Hibernate.cfg.xml"))
                        .BuildSessionFactory();
            }
            return _factory.OpenSession();
        }
    }
}