c# - 在我的 MVC 应用程序中添加迁移时,什么可能导致我的空对象异常?
问题描述
我已经在我的 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>
除了早些时候断电导致应用程序崩溃之外,我所知道的一切都没有改变。这可能是无关的,但无论如何值得一提。
我能做些什么来潜在地解决这个问题?
解决方案
尝试添加[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; }
}
}
推荐阅读
- android - room:如何在 Kotlin Android 中获取 Room 交易成功/失败的回调?
- android - BLE - 如果扫描什么也没找到,为什么我没有收到回调?
- html - 如何从 HTML 标签中提取数字
- java - 如何打印单词数组中的字符串,包括其重复项?
- jenkins - Jenkins - 无法使用 Groovy postbuild 插件发送松弛通知
- c - 递归方法不适用于二叉搜索树
- python - matplotlib-重塑轴的范围
- python - 某些任务的响应时间正在减少
- algorithm - 面对使用乳胶的算法中的ENDIF问题
- python-3.x - 如何检查 Flask 中的 abort() 是否抛出自定义错误消息?