2010-12-17 19 views
6

पर डिलीट कैस्केड विकल्प को नहीं जोड़ रहा है यहां मेरा एनएचबीर्नेट मैपिंग है।एनएचबेर्नेट मैपिंग विदेशी कुंजी संदर्भ

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HelloNHibernate" namespace="HelloNHibernate"> 
    <class name="Showing" table="showing"> 
    <id name="Id" column="showing_id"> 
     <generator class="identity"/> 
    </id> 
    <many-to-one class="Theater" name="Theater" column="theater_id" foreign-key="fk_showing_theater_theater_id" cascade="delete" lazy="false" fetch="join"/> 
    <many-to-one class="Movie" name="Movie" column="movie_id" foreign-key="fk_showing_movie_movie_id" cascade="delete" lazy="false" fetch="join" /> 
    </class> 
</hibernate-mapping> 

यहाँ एसक्यूएल (PostgreSQL) SchemaExport उपकरण द्वारा उत्पन्न:

CREATE TABLE showing 
(
    showing_id serial NOT NULL, 
    theater_id integer, 
    movie_id integer, 
    CONSTRAINT showing_pkey PRIMARY KEY (showing_id), 
    CONSTRAINT fk_showing_movie_movie_id FOREIGN KEY (movie_id) 
     REFERENCES movie (movie_id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT fk_showing_theater_theater_id FOREIGN KEY (theater_id) 
     REFERENCES theater (theater_id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
) 

क्या मैं गलत कर रहा हूँ? धन्यवाद!

उत्तर

8

एनएचबर्ननेट केवल प्रतिकूल संग्रहों पर on delete cascade बाधा उत्पन्न कर सकता है। अपने डोमेन के लिए

उदाहरण:

<class name="Movie"> 
    ... 
    <bag name="Showings" inverse="true" cascade="all"> 
    <key column="Foo" on-delete="cascade" /><!--Here's the magic--> 
    <one-to-many class="Showing" /> 
    </bag> 
</class> 
1

एनएचबेर्नेट की कैस्केड सेटिंग विदेशी कुंजी को कैस्केडिंग नहीं करती है। यह क्रियाओं को नियंत्रित करता है जब एक सत्र फ़्लश होने पर NHibnerate ले जाएगा।

इसके अलावा, रिश्तों के कई पक्षों के लिए एक तरफ डेस्लेट को कैस्केड करना बहुत असामान्य है। जब एक दिखाया गया है तो आपका मानचित्रण एक संबंधित मूवी और रंगमंच को हटा देगा।

5

यहाँ स्वीकार किए जाते हैं जवाब के पूरक करने के लिए, कैसे आप धाराप्रवाह NHibernate के साथ यह कर करेंगे:

public class MovieMap : ClassMap<Movie> 
{ 
    public MovieMap() 
    { 
     ... 
     HasMany(c => c.Showings) 
       .Inverse() 
       .KeyColumn("Foo") 
       .Cascade.All() 
       .ForeignKeyCascadeOnDelete() // here's the magic 
       .ForeignKeyConstraintName("FK_Movie_Showing"); // this is optional - name is autogenerated otherwise 
+1

मैं वर्तमान में क्यों मेरे झरना पता लगाने के लिए खोज कर रहा हूँ हटाना काम नहीं कर रहा है। प्रत्येक बार जब मुझे कोई जवाब मिलता है, तो कोड की एक और पंक्ति की आवश्यकता होती है ;-) – PandaWood

संबंधित मुद्दे