2013-08-03 17 views
5

Używam pierwszej migracji kodu ramowego jednostki w moim projekcie mvc. Ale ostatnio po modyfikacji klasy modelu i dodaniu nowych, gdy próbuję użyć add-migration w konsoli menedżera pakietów, ciągle otrzymuję ten błąd: "Odwołanie do obiektu nie jest ustawione na instancję obiektu" używam entity framework version 5 i kiedy spróbuj użyć wersji 6, ale nie zobaczę mojego DbContext, tutaj jest mój ślad stosu, proszę każda sugestia zostanie przyjęta z zadowoleniem.Struktura podmiotu: Zezwolono na wyjątek odwołań zerowych podczas dodawania migracji w konsoli menedżera pakietów VS 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

Upewnij się, że istnieją ciągi połączeń w pliku konfiguracyjnym i są poprawnie nazwane. –

+0

Czy możemy uzyskać wewnętrzny wyjątek? –

+0

Wygląda jak błąd. Czy możesz zgłosić na http://entityframework.codeplex.com (przejdź do Problemy -> Nowy problem)? Podczas zgłaszania należy dołączyć repro. – Pawel

Odpowiedz

1

Było brakujące ogniwo w Repro ale znalazłam kogoś innego raportowania ten sam/podobny problem here więc użyję ich przykładem. Poniżej znajduje się repro:

Występuje błąd w EF5 powodujący wyjątek NullReferenceException. To nie działa w EF6 z ​​powodu innego błędu, ale uważam, że żaden z nich nie ma tu zastosowania. Wydaje mi się, że zamiarem było odwzorowanie jednej właściwości nawigacji z elementu Osoba na dwie właściwości nawigacji z obiektu Meeting i nie jest to obsługiwane przez EF (podobnie nie można byłoby tego stwierdzić po prostu patrząc na zawartość Person.Meeting). zbierania informacji o tym, czy użytkownik jest na spotkaniu jako klient, czy jako agent sprzedaży (lub oba?) - należy porównać kluczowe wartości/referencje - EF po prostu tego nie robi). Aby rozwiązać ten model musi być zmieniony w następujący sposób:

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); 

    } 

Teraz mamy dwie właściwości nawigacyjnych na własność osoby, które są przypisane do odpowiednich właściwości nawigacyjnych na podmiot Meeting.

+0

Bardzo niejasny błąd. Miałem stopniowane z v6 na v5 i otrzymałem wyjątek i nie miałem pojęcia, dlaczego. Dzięki! –

Powiązane problemy