2010-12-13 13 views
12

कोड के पहले ईएफ 4 (सीटीपी 5 का उपयोग करके) के साथ एक ही प्रकार के दो नेविगेशन गुणों को कैसे स्थापित कर सकता हूं, मैं विदेशी कुंजी के साथ एक ही नेविगेशन प्रॉपर्टी जोड़ सकता हूं और यह नामकरण का सम्मान करेगा और केवल विदेशी कुंजी जोड़ देगा एक बार टेबल पर। यदि मैं जाता हूं और उसी प्रकार की दूसरी संपत्ति जोड़ता हूं, तो यह इसे केवल दो कॉलम के बजाय तालिका में 4 कॉलम में विभाजित करता है।मैं एंटिटी फ्रेमवर्क

नमूना कोड:

इस मॉडल के साथ

, मैं केवल एक प्रॉपर्टी PressTypeID नामित PressType के लिए AdapterFrameCapability तालिका में जोड़ा मिलता है।

public class AdapterFrameCapability 
{ 
    [Key] 
    public int AdapterFrameCapabilityID { get; set; } 

    [Required] 
    public int PressTypeID { get; set; } 

    public virtual PressType PressType { get; set; } 
} 

इस सेटअप मैं मॉडल बनाना चाहते हैं, लेकिन यह में 4 कॉलम तालिका, FromPressTypeID, FromPressTypeFromPressTypeID, ToPressTypeID और ToPressTypePressTypeID के लिए एक-एक में बनाया जा रहा परिणाम है। आदर्श रूप से मैं बस FromPressTypeID और ToPressTypeID के लिए एक कॉलम पसंद करूंगा। मुझसे यहां क्या गलत हो रहा है?

public class AdapterFrameCapability 
{ 
    [Key] 
    public int AdapterFrameCapabilityID { get; set; } 

    [Required] 
    public int FromPressTypeID { get; set; } 

    [Display(Name = "From Press Type")] 
    public virtual PressType FromPressType { get; set; } 

    [Required] 
    public int ToPressTypeID { get; set; } 

    [Display(Name = "To Press Type")] 
    public virtual PressType ToPressType { get; set; } 
} 

उत्तर

14

यह उन स्थितियों है कि आप fluent API ड्रॉप डाउन करने की जरूरत है वांछित स्कीमा प्राप्त करें में से एक है:

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<AdapterFrameCapability>() 
       .HasRequired(afc => afc.FromPressType) 
       .WithMany() 
       .HasForeignKey(afc => afc.FromPressTypeID) 
       .WillCascadeOnDelete(true); 

    modelBuilder.Entity<AdapterFrameCapability>() 
       .HasRequired(afc => afc.ToPressType) 
       .WithMany() 
       .HasForeignKey(afc => afc.ToPressTypeID) 
       .WillCascadeOnDelete(false); 
} 

झरना स्विचिंग संघों में से एक पर बंद हटाना जानबूझकर है, क्योंकि अन्यथा एसक्यूएल सर्वर होगा

Introducing FOREIGN KEY constraint 'AdapterFrameCapability_ToPressType' on table 'AdapterFrameCapabilities' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint.

: निम्न त्रुटि बाहर फेंक तो हमें कोड में किए गए तरीके से एक संगठन में इसे बंद करने की आवश्यकता है।

0

मैंने सोचा कि आप डेटा एनोटेशन विशेषता

[ForeignKey("FromPressTypeId")] 

आदि का उपयोग करने लगता है कर रहे थे

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