2011-02-16 15 views
5

मैं दो टेबलों के बीच विभाजित एक पीओसीओ ऑब्जेक्ट को जारी रखने की कोशिश करने के लिए ईएफ 4 सीटीपी 5 का उपयोग कर रहा हूं, लिंक संपर्क Contact है। जब मैं एक संपर्क सहेजता हूं, तो मैं कोर संपर्क जानकारी को एक तालिका (संपर्क) में सहेजना चाहता हूं, और उस उपयोगकर्ता के लिंक जो दूसरे के संपर्क में है (UserToContacts)। मेरे पास नीचे परिभाषित कस्टम मैपिंग है, लेकिन जब मैं SaveChanges, मुझे निम्न त्रुटि मिलती है:ईएफ 4 कोड पहला - एकाधिक टेबल्स में एक इकाई को विभाजित करने के लिए सही ढंग से मानचित्र कैसे करें

इकाइयों या संघों में साझा मूल्य एक से अधिक स्थानों में उत्पन्न होता है। जांचें कि मैपिंग एंटीटीकी को कई स्टोर-जेनरेट किए गए कॉलम में विभाजित नहीं करता है।

किसी भी विचार की सराहना की जाएगी!

protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     /// Perform Custom Mapping 
     modelBuilder.Entity<Contact>() 
      .Map(mc => 
      { 
       mc.Properties(p => new 
       { 
        p.ContactID, 
        p.FirstName, 
        p.MiddleName, 
        p.LastName 
       }); 
       mc.ToTable("Contacts"); 
      }) 
     .Map(mc => 
     { 
      mc.Properties(p => new 
      { 
       p.ContactID, 
       p.UserID 
      }); 
      mc.ToTable("UserToContacts"); 
     }); 
    } 

उत्तर

2

यह एक बग है कि एफई टीम अपने कोड बेस में यह तय कर दी है के बाद CTP5 जारी किया गया था है। इकाई विभाजन को केवल तालिकाओं में से किसी एक पर पहचान का उपयोग किया जाना चाहिए, लेकिन सीटीपी 5 इसे सभी तालिकाओं के लिए कॉन्फ़िगर करता है (यदि आप अपनी तालिकाओं को देखते हैं तो आप देखेंगे कि ContactID दोनों में पहचान कॉलम के रूप में कॉन्फ़िगर किया गया है)। इसका मतलब है आप जब एक नया संपर्क ऑब्जेक्ट बनाने वैध पीकेएस प्रदान करने के लिए जिम्मेदार हैं

public class Contact 
{ 
    [DatabaseGenerated(DatabaseGenerationOption.None)] 
    public int ContactID { get; set; }  
    public string FirstName { get; set; } 
    public string MiddleName { get; set; } 
    public string LastName { get; set; } 

    public int UserID { get; set; } 
} 

:

वैकल्पिक हल के लिए अब तालिका बंटवारे पर सभी के साथ पहचान का उपयोग नहीं करने के लिए है।

1

बस आईडी निर्दिष्ट नहीं करते हैं, यह स्वतः ही जोड़ दिया जाएगा

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    /// Perform Custom Mapping 
    modelBuilder.Entity<Contact>() 
     .Map(mc => 
     { 
      mc.Properties(p => new 
      { 
       p.FirstName, 
       p.MiddleName, 
       p.LastName 
      }); 
      mc.ToTable("Contacts"); 
     }) 
    .Map(mc => 
    { 
     mc.Properties(p => new 
     { 
      p.UserID 
     }); 
     mc.ToTable("UserToContacts"); 
    }); 
}