2013-08-03 14 views
5

में माइग्रेशन जोड़ने पर शून्य संदर्भ अपवाद फेंक दिया गया है, मैं अपने एमवीसी प्रोजेक्ट में इकाई फ्रेमवर्क कोड का पहला माइग्रेशन का उपयोग कर रहा हूं। लेकिन हाल ही में मेरे मॉडल वर्ग को संशोधित करने और नए जोड़ने के बाद, जब मैं पैकेज मैनेजर कंसोल में एड-माइग्रेशन का उपयोग करने का प्रयास करता हूं, तो मुझे यह त्रुटि मिलती है: 'ऑब्जेक्ट रेफरेंस ऑब्जेक्ट के इंस्टेंस पर सेट नहीं है' मैं entity framework version 5 का उपयोग कर रहा हूं और जब मैं संस्करण 6 का उपयोग करने का प्रयास करें, लेकिन यह मेरे डीबीकॉन्टेक्स्ट नहीं देखेगा, यहां मेरा स्टैक ट्रेस है, कृपया प्रत्येक सुझाव का स्वागत किया जाएगा।इकाई ढांचा: पैकेज प्रबंधक कंसोल वीएस 2012

System.NullReferenceException: Object reference not set to an instance of an object. 
    at System.Data.Entity.ModelConfiguration.Configuration.Types.EntityTypeConfiguration.Configure(EdmEntityType entityType, EdmModel model) 
    at System.Data.Entity.ModelConfiguration.Configuration.ModelConfiguration.ConfigureEntities(EdmModel model) 
    at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) 
    at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) 
    at System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext context, XmlWriter writer) 
    at System.Data.Entity.Migrations.Extensions.DbContextExtensions.<>c__DisplayClass1.<GetModel>b__0(XmlWriter w) 
    at System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(Action`1 writeXml) 
    at System.Data.Entity.Migrations.Extensions.DbContextExtensions.GetModel(DbContext context) 
    at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext) 
    at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration) 
    at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator() 
    at System.Data.Entity.Migrations.Design.ToolingFacade.GetPendingMigrationsRunner.RunCore() 
    at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() 
Object reference not set to an instance of an object. 
+0

सुनिश्चित करें कि कॉन्फ़िगरेशन फ़ाइल में कनेक्शन स्ट्रिंग मौजूद हैं और ठीक से नामित हैं। –

+0

क्या हम संभवतः आंतरिक अपवाद प्राप्त कर सकते हैं? –

+0

मुझे एक बग की तरह लग रहा है। क्या आप http://entityframework.codeplex.com पर रिपोर्ट कर सकते हैं (समस्याएं -> नया मुद्दा) पर जाएं? रिपोर्टिंग करते समय कृपया एक रेपो शामिल करें। – Pawel

उत्तर

1

अपने रेप्रो में एक लापता टुकड़ा था, लेकिन मैं किसी और ही/वही समस्या here रिपोर्टिंग तो मैं उनके उदाहरण का उपयोग करेगा पाया। यहां रेपो है:

public class Person 
{ 
    public int PersonID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public virtual ICollection<Meeting> Meeting { get; set; } 
} 

public class Meeting 
{ 
    public int MeetingID { get; set; } 

    [ForeignKey("Customer")] 
    public int CustomerID { get; set; } 

    public virtual Person Customer { get; set; } 

    [ForeignKey("SalesAgent")] 
    public int SalesAgentID { get; set; } 

    public virtual Person SalesAgent { get; set; } 
} 

public class MyContext : DbContext 
{ 
    public DbSet<Person> People { get; set; } 
    public DbSet<Meeting> Meetings { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Meeting>().HasRequired(m => m.Customer).WithMany(p => p.Meeting); 
     modelBuilder.Entity<Meeting>().HasRequired(m => m.SalesAgent).WithMany(p => p.Meeting); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (var ctx = new MyContext()) 
     { 
      EdmxWriter.WriteEdmx(ctx, XmlWriter.Create(Console.Out, new XmlWriterSettings { Indent = true })); 
     } 
    } 
} 

ईएफ 5 में एक बग है जो NullReferenceException का कारण बनती है। यह अलग-अलग बग के कारण ईएफ 6 में काम नहीं करता है लेकिन मेरा मानना ​​है कि इनमें से कोई वास्तव में यहां प्रासंगिक नहीं है। मुझे लगता है कि यहां इरादा इकाई इकाई से एक नेविगेशन संपत्ति को मीटिंग इकाई से दो नेविगेशन गुणों में मैप करना था और यह ईएफ द्वारा समर्थित नहीं है (इसी प्रकार आप केवल व्यक्ति की सामग्री को देखकर नहीं बता पाएंगे। संग्रह करें कि उपयोगकर्ता ग्राहक के रूप में या बिक्री एजेंट (या दोनों?) के रूप में मीटिंग में है या नहीं - आपको मुख्य मान/संदर्भों की तुलना करना होगा - ईएफ बस ऐसा नहीं करता है)। इस प्रकार इस मॉडल की जरूरत है परिवर्तित करने की ठीक करने के लिए:

public class Person 
{ 
    public int PersonID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public virtual ICollection<Meeting> MeetingsAsCustomer { get; set; } 

    public virtual ICollection<Meeting> MeetingAsSalesAgent { get; set; } 
} 

public class Meeting 
{ 
    public int MeetingID { get; set; } 

    [ForeignKey("Customer")] 
    public int CustomerID { get; set; } 

    public virtual Person Customer { get; set; } 

    [ForeignKey("SalesAgent")] 
    public int SalesAgentID { get; set; } 

    public virtual Person SalesAgent { get; set; } 
} 

public class MyContext : DbContext 
{ 
    public DbSet<Person> People { get; set; } 
    public DbSet<Meeting> Meetings { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<Meeting>().HasRequired(m => m.Customer).WithMany(p => p.MeetingsAsCustomer); 
     modelBuilder.Entity<Meeting>().HasRequired(m => m.SalesAgent).WithMany(p => p.MeetingAsSalesAgent); 

    } 

अब हम व्यक्ति की संपत्ति है कि बैठक इकाई पर इसी नेविगेशन गुण के लिए मैप की जाती हैं पर दो नेविगेशन गुण होते हैं।

+0

बहुत अस्पष्ट बग। मैंने v6 से v5 तक वर्गीकृत किया था और अपवाद प्राप्त कर रहा था और मुझे पता नहीं था कि क्यों। धन्यवाद! –

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