Try Product product = session.Load<Product>(1); session.Delete(product);
This should actually only create a proxy for the Product 8assuming you are using lazy loading). Then you can remove it. then you can use on-delete in the mapping to let the database clean up referenced records: http://vanryswyckjan.blogspot.com/2008/04/nhibernate-20-and-cascading-deletes.html On 14 Aug., 11:12, "Jeffrey Zhao" <je...@live.com> wrote: > Hello, > > I'm a new for NH and I met the problem of "how can I delete an entity". For > example, I've got two entity with an one-to-many association. > Here's the sql to build the table (omit the association): > > CREATE TABLE [dbo].[Property]( > [PropertyID] [int] IDENTITY(1,1) NOT NULL, > [ProductID] [int] NOT NULL, > [Name] [nvarchar](50) NOT NULL, > [SortOrder] [int] NOT NULL, > CONSTRAINT [PK_Property] PRIMARY KEY CLUSTERED > ( > [PropertyID] ASC > )) > GO > > CREATE TABLE [dbo].[Product]( > [ProductID] [int] IDENTITY(1,1) NOT NULL, > [Name] [nvarchar](50) NOT NULL, > CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED > ( > [ProductID] ASC > )) > GO > > Here comes the entities: > > public class Product > { > public virtual int ProductID { get; set; } > public virtual string Name { get; set; } > public virtual ISet<Property> Properties { get; set; }} > > public class Property > { > public virtual int PropertyID { get; set; } > public virtual int ProductID { get; set; } > public virtual string Name { get; set; } > public virtual int SortOrder { get; set; } > > } > > and my hbm.xml file: > > <?xml version="1.0" encoding="utf-8" ?> > <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHTest" > namespace="NHTest"> > <class name="Product" table="Product"> > <id name="ProductID" column="ProductID"> > <generator class="identity"/> > </id> > <property name="Name"/> > <set name="Properties" cascade="all"> > <key column="ProductID"/> > <one-to-many class="Property"/> > </set> > </class> > <class name="Property"> > <id name="PropertyID"> > <generator class="identity"/> > </id> > <property name="Name"/> > <property name="SortOrder"/> > <property name="ProductID" /> > </class> > </hibernate-mapping> > > well, that's quite simple, and I can insert one Product with two Properties > without problem, but how can I delete the Product with ID equals 1? I tried: > > session.Delete(new Product { ProductID = 1 }); > session.Flush(); > > But NH always want to update the properties' ProductID to NULL, but my schema > won't accept the change (for NOT NULL). I tried every cascade settings in the > <set /> element but always faild by updating. > I just want to execute the SQL like "DELETE FROM Product WHERE ProductID = 1" > and everything else could be done in database. (e.g., cascade deletion). > What should I do? > > Blog:http://www.cnblogs.com/JeffreyZhao/ > Twitter:http://twitter.com/jeffz_cn --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to nhusers@googlegroups.com To unsubscribe from this group, send email to nhusers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---