Что может быть причиной исключения моего нулевого объекта при добавлении миграции в мое приложение MVC? - PullRequest
0 голосов
/ 05 июля 2018

Я уже давно использую код для первой миграции в своем приложении mvc, и это всегда работает без проблем, однако сегодня я получаю сообщение об ошибке:

Ссылка на объект не установлена ​​для экземпляра объекта.

Это началось после того, как я добавил новую модель:

using System;
using System.ComponentModel.DataAnnotations;

namespace MyProject.Models
{
    public class Tab
    {
        public int Id { get; set; }
        [Display(Name = "Tab Name")]
        public string TabName { get; set; }
        [Display(Name = "Name")]
        public string UserName { get; set; }
        [Display(Name = "Email")]
        public string UserEmail { get; set; }
        [Display(Name = "Created")]
        public DateTime? CreatedAt { get; set; }
        [Display(Name = "Filter String")]
        public string FilterString { get; set; }
    }
}

Я добавил контекст базы данных так же, как и предыдущие таблицы

public DbSet<Tab> Tabs { get; set; }

Затем я добавил миграцию, потому что таблица не существует

Add-Migration SomeName

, который запускается и затем выдает мне следующую ошибку:

PM> Add-Migration Test
System.NullReferenceException: Object reference not set to an instance of an object.
   at System.Data.Entity.Utilities.PropertyInfoExtensions.IsStatic(PropertyInfo property)
   at System.Data.Entity.Utilities.TypeExtensions.<GetInstanceProperties>b__22(PropertyInfo p)
   at System.Linq.Enumerable.WhereArrayIterator`1.MoveNext()
   at System.Data.Entity.Core.Metadata.Edm.MetadataPropertyCollection.ItemTypeInformation.GetItemProperties(Type clrType)
   at System.Data.Entity.Core.Metadata.Edm.MetadataPropertyCollection.<.cctor>b__0(Type clrType)
   at System.Data.Entity.Core.Common.Utils.Memoizer`2.<>c__DisplayClass2.<Evaluate>b__0()
   at System.Data.Entity.Core.Common.Utils.Memoizer`2.Result.GetValue()
   at System.Data.Entity.Core.Common.Utils.Memoizer`2.Evaluate(TArg arg)
   at System.Data.Entity.Core.Metadata.Edm.MetadataPropertyCollection.GetSystemMetadataProperties(MetadataItem item)
   at System.Data.Entity.Core.Metadata.Edm.MetadataItem.GetMetadataProperties()
   at System.Data.Entity.Core.Metadata.Edm.MetadataItem.get_Annotations()
   at System.Data.Entity.Edm.EdmModelVisitor.VisitMetadataItem(MetadataItem item)
   at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ModelConventionDispatcher.VisitMetadataItem(MetadataItem item)
   at System.Data.Entity.Edm.EdmModelVisitor.VisitEdmAssociationType(AssociationType item)
   at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ModelConventionDispatcher.VisitEdmAssociationType(AssociationType item)
   at System.Data.Entity.Edm.EdmModelVisitor.VisitCollection[T](IEnumerable`1 collection, Action`1 visitMethod)
   at System.Data.Entity.Edm.EdmModelVisitor.VisitAssociationTypes(IEnumerable`1 associationTypes)
   at System.Data.Entity.Edm.EdmModelVisitor.VisitEdmModel(EdmModel item)
   at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ModelConventionDispatcher.VisitEdmModel(EdmModel item)
   at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ModelConventionDispatcher.Dispatch()
   at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ApplyConceptualModel(DbModel model)
   at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo)
   at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
   at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
   at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
   at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
   at System.Data.Entity.Internal.LazyInternalContext.get_ModelBeingInitialized()
   at System.Data.Entity.Infrastructure.EdmxWriter.WriteEdmx(DbContext context, XmlWriter writer)
   at System.Data.Entity.Utilities.DbContextExtensions.<>c__DisplayClass1.<GetModel>b__0(XmlWriter w)
   at System.Data.Entity.Utilities.DbContextExtensions.GetModel(Action`1 writeXml)
   at System.Data.Entity.Utilities.DbContextExtensions.GetModel(DbContext context)
   at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext, DatabaseExistenceState existenceState, Boolean calledByCreateDatabase)
   at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration)
   at System.Data.Entity.Migrations.Design.MigrationScaffolder..ctor(DbMigrationsConfiguration migrationsConfiguration)
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()
Object reference not set to an instance of an object.
PM> 

Ничего из того, что мне известно, не изменилось, за исключением сбоя приложения из-за отключения питания ранее. Это, вероятно, не связано, но все равно стоит упомянуть.

Что я могу сделать, чтобы исправить это?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Я не уверен, что произошло, но поскольку ничего «типичного» не работало, мне пришлось ремонтировать визуальную студию. Теперь он работает без проблем, на этом этапе я должен винить в отключении питания и потенциальном повреждении программного обеспечения.

0 голосов
/ 05 июля 2018

Попробуйте добавить [Key]

using System;
using System.ComponentModel.DataAnnotations;

namespace MyProject.Models
{
    public class Tab
    {
        [Key]
        public int Id { get; set; }
        [Display(Name = "Tab Name")]
        public string TabName { get; set; }
        [Display(Name = "Name")]
        public string UserName { get; set; }
        [Display(Name = "Email")]
        public string UserEmail { get; set; }
        [Display(Name = "Created")]
        public DateTime? CreatedAt { get; set; }
        [Display(Name = "Filter String")]
        public string FilterString { get; set; }
    }
}
...