Domanda

In breve, il problema è che, quando l'oggetto add bambino alla proprietà raccolta dell'oggetto padre senza regolazione esplicita la proprietà parent dell'oggetto bambino, l'inserto fallirà. Facciamo un esempio:

Nota :. Sto usando NHibernate 3.0 beta1

Esempio: categoria di prodotto Senario:

(1) dello schema del database:

  1. Categoria (Id, Name)
  2. del prodotto (Id, nome, prezzo, CategoryId)

(2) C # Codice in materia di modelli di dominio

public class Category
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual IList<Product> Products { get; private set; }
}    

public class Product
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual decimal Price { get; set; }
    public virtual Category Category { get; set; }
}

(3) Mapping

<class name="Category" table="Category">
  <id name="Id" column="Id">
    <generator class="identity" />
  </id>
  <property name="Name" />
  <bag name="Products" inverse="true" cascade="all">
    <key column="CategoryId" />
    <one-to-many class="Core.Product"/>
  </bag>
</class>

<class name="Product" table="Product">
  <id name="Id" column="Id">
    <generator class="identity" />
  </id>

  <property name="Name" />
  <property name="Price" />
  <many-to-one name="Category" column="CategoryId" />
</class>

(4) Chiamare codice

using (var session = sessionFactory.OpenSession())
{
    Category category = session.Query<Category>().FirstOrDefault();
    Product product = new Product
    {
        Name = "test",
        Price = 50
    };
    category.Products.Add(product);
    // Here, the p.Category is null, but it should NOT be null
    // And if now I commit the changes the the database,
    // And exception will be thrown: Cann't insert null to column CategoryId
}

Quando viene eseguito il category.Products.Add(product), il product.Category shoule essere oggetto category! Se io insieme esplicito il product.Category alla categoria, il commit operazione avrà successo. Perchè questo? Il bug di NHibernate 3.0 beta1 o altri?

È stato utile?

Soluzione

Questo comporta esattamente come documentato.

6.4. Uno-a-molti Associazioni

NHibernate NON impostare product.Category per voi. Il solito modo per evitare di dimenticare questo è l'aggiunta di un metodo AddProduct alla categoria che aggiunge il prodotto alla raccolta prodotti e imposta la proprietà Categoria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top