2010-12-10 7 views
5

मेरे पास ईएफ कोड पहला सीटीपी 4 काम कर रहा था, और मैंने आज सीटीपी 5 स्थापित किया। अब, जब मेरा डेटाबेस दोहराया जाता है तो मुझे अपवाद मिलता है।ईएफ 4 कोड पहला सीटीपी 5: बीज विधि अब काम नहीं करती

यहाँ मेरी मॉडल है:

public class Member 
{ 
    public Member() 
    { 
     DateCreated = DateTime.Now; 
     DateUpdated = DateTime.Now; 
     DateLastLogin = DateTime.Now; 
    } 
    [Key, DatabaseGenerated(DatabaseGenerationOption.Identity)] \\I have tried removing these annotations and the result is the same 
    public int MemberId { get; set; } 
    [Required,RegularExpression(".+\\@.+\\..+", ErrorMessage = "Please enter a valid email address")] 
    public string Email { get; set; } 
    [Required,StringLength(20,MinimumLength=2)] 
    public string FirstName { get; set; } 
    [Required, StringLength(20, MinimumLength = 2)] 
    public string LastName { get; set; } 
    [Required, StringLength(36, MinimumLength = 2)] 
    public string City { get; set; } 
    [Required, StringLength(20, MinimumLength = 2)] 
    public string State { get; set; } 
    [Required, StringLength(20, MinimumLength = 2)] 
    public string Zip { get; set; } 
    public double GeoLat { get; set; } 
    public double GeoLong { get; set; } 
    public string AccountStatus { get; set; } 
    public DateTime DateCreated { get; private set; } 
    public DateTime DateUpdated { get; set; } 
    public DateTime DateLastLogin { get; set; } 

    public virtual PublicProfile Profile { get; set; }   
} 

यहाँ कोड है कि Global.asax.cs

protected void Application_Start() 
{   
    RegisterRoutes(RouteTable.Routes); 
    DbDatabase.DefaultConnectionFactory = new SqlConnectionFactory("System.Data.SqlClient"); 
    DbDatabase.SetInitializer<MeetPplDB>(new Initializer()); 
} 

public class Initializer : DropCreateDatabaseAlways<MeetPplDB> 
{ 
    protected override void Seed(MeetPplDB context) 
    { 
     var Members = new List<Member> 
     { 
      new Member { 
       Email = "[email protected]", 
       City = "San Francisco", 
       AccountStatus = "Active", 
       State = "CA", 
       FirstName = "David", 
       LastName = "Daverson", 
       Zip = "94118", 
       GeoLat = 37.735, 
       GeoLong = -122.392 }, 

      new Member { 
       Email = "[email protected]", 
       City = "Oakland", 
       AccountStatus = "Active", 
       State = "CA", 
       FirstName = "Bob", 
       LastName = "Boberson", 
       Zip = "94601", 
       GeoLat = 37.781, 
       GeoLong = -122.216 }, 

      new Member { 
       Email = "[email protected]", 
       City = "San Francisco", 
       AccountStatus = "Active", 
       State = "CA", 
       FirstName = "Jenny", 
       LastName = "Jennerson", 
       Zip = "94123", 
       GeoLat = 37.735, 
       GeoLong = -122.392 } 
     }; 
     Members.ForEach(m => context.Members.Add(m)); 
     context.SaveChanges(); 
    } 
} 

में बुलाया जा रहा है जब यह संदर्भ पर SaveChanges पर पड़ती है, मैं इस अपवाद :

विवादित परिवर्तनों का पता चला। यह एक ही कुंजी के साथ कई इकाइयों को सम्मिलित करने का प्रयास करते समय हो सकता है।

विवरण: वर्तमान वेब अनुरोध के निष्पादन के दौरान एक अनचाहे अपवाद हुआ। त्रुटि के बारे में अधिक जानकारी के लिए और जहां यह कोड में उत्पन्न हुआ, कृपया स्टैक ट्रेस की समीक्षा करें।

अपवाद विवरण: System.Data.UpdateException: विवादित परिवर्तनों का पता चला। यह एक ही कुंजी के साथ कई इकाइयों को सम्मिलित करने का प्रयास करते समय हो सकता है।

क्या किसी को पता है कि क्या बदल गया है और यह अब और क्यों काम नहीं करता है? काम करने के लिए इसे बदलने की क्या ज़रूरत है?

+0

मैं कुछ भी अपने कोड के साथ गलत नहीं देख पा रहे या समस्या को दोहराने कर सकते हैं के साथ इस अपने कोड

public class Initializer : DropCreateDatabaseAlways<MeetPplDB> { protected override void Seed(MeetPplDB context) { var _members = new List<Member> { new Member { Email = "[email protected]", City = "San Francisco", .... _members.ForEach(m => context.Members.Add(m)); context.SaveChanges(); 

मैं तुलना की कोशिश करो। क्षमा करें, शुभकामनाएँ। – Paul

+0

मैं निम्नलिखित [इस श्रृंखला] का पालन कर रहा हूं (http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-1-introduction- और-model.aspx) सीटीपी 5 पर, और मेरे प्रारंभकर्ता के पास 'सेव चेंज' कॉल नहीं है, लेकिन फिर भी डेटाबेस को सही ढंग से पॉप्युलेट करता है। शायद सीटीपी 4 और सीटीपी 5 के बीच कुछ बदल गया है जहां प्रारंभकर्ता के लिए परिवर्तन सहेजे गए हैं? – ProfK

उत्तर

0

आपके अपवाद का कारण यह है कि आपके पास डेटाबेस जेनरेशनऑप्शन। इडेंटिटी के साथ डेटाटाइप int है। पहचान का उपयोग एक गाइड उत्पन्न करेगा और एक int कुंजी नहीं होगा।

मुझे एक ही समस्या है क्योंकि मैं एक प्रकार की int और एक ग्रिड को एक अद्वितीय पंक्ति के रूप में रखना चाहता हूं। और बीज काम करना बंद कर देता है अगर मैं एक इकाई पर दोनों का उपयोग करता हूं भले ही वे अलग-अलग प्रोप में हों।

+0

अभी तक कोई समाधान नहीं मिला है? मेरे पास अभी भी वही समस्या है। –

0

शायद क्योंकि आपके द्वारा उपयोग किए जाने वाले आपके चर नाम को ईएफ द्वारा बहुवचन के रूप में उत्पन्न किया गया है।

बजाय

:

public class Initializer : DropCreateDatabaseAlways<MeetPplDB> 
{ 
    protected override void Seed(MeetPplDB context) 
    { 
     var Members = new List<Member> 
     { 
      new Member { 
       Email = "[email protected]", 
       City = "San Francisco", 
..... 

स्कॉट गु के http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx

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