NHibernate: Quelle est l'identité Id mis à jour lors de l'enregistrement d'une instance éphémère?

Si j'utilise la session-par-opération et appeler:

session.SaveOrUpdate(entité) corrigé:
session.SaveOrUpdateCopy(entité)

..et l'entité est une instance transitoire de l'identité-Id=0. Est au-dessus de la ligne automatiquement à jour l'Id de l'entité, et de faire l'instance persistante? Ou devrait-il le faire sur la transaction.S'engager? Ou dois-je en quelque sorte de code de façon explicite?

Évidemment l'Id de la ligne de base de données (nouvelles, depuis transitoire) est automatiquement générée et enregistrée comme un certain nombre, mais je parle du paramètre réel exemple ici. Qui est la logique métier de l'instance.


MODIFIER - Suivi, de problèmes liés à la.

Mappages:

public class StoreMap : ClassMap<Store>
{
    public StoreMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x =>  x.Name);
        HasMany(x => x.Staff)    //1:m
            .Cascade.All();       
        HasManyToMany(x => x.Products)  //m:m
            .Cascade.All()
            .Table("StoreProduct");    
    }
}

public class EmployeeMap : ClassMap<Employee> 
{
    public EmployeeMap()
    {
        Id(x => x.Id).GeneratedBy.Identity();   
        Map(x => x.FirstName);
        Map(x => x.LastName);
        References(x => x.Store);    //m:1
    }
}

public class ProductMap : ClassMap<Product>
{
    public ProductMap() 
    {
        Id(x => x.Id).GeneratedBy.Identity();
        Map(x => x.Name).Length(20);
        Map(x => x.Price).CustomSqlType("decimal").Precision(9).Scale(2);
        HasManyToMany(x => x.StoresStockedIn)
        .Cascade.All()
        .Inverse()
        .Table("StoreProduct");
     } 
}

EDIT2

Définitions de classe:

   public class Store
{
    public int Id { get; private set; }
    public string Name { get; set; }
    public IList<Product> Products { get; set; }
    public IList<Employee> Staff { get; set; }

    public Store()
    {
        Products = new List<Product>();
        Staff = new List<Employee>();
    }


    //AddProduct & AddEmployee is required. "NH needs you to set both sides before
    //it will save correctly" 

    public void AddProduct(Product product)
    {
        product.StoresStockedIn.Add(this);
        Products.Add(product);
    }

    public void AddEmployee(Employee employee)
    {
        employee.Store = this;
        Staff.Add(employee);
    }
}

public class Employee
{
    public int Id { get;  private set; }
    public string FirstName { get;  set; }
    public string LastName { get;  set; }
    public Store Store { get; set; }
}

public class Product
{
    public int Id { get; private set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public IList<Store> StoresStockedIn { get; private set; }
}

OriginalL'auteur bretddog | 2011-02-04