Ciz*_*hil 5 c# asp.net-mvc entity-framework
我一直在我的mvc项目中使用实体框架代码首次迁移.但最近在修改我的模型类并添加新模型后,当我尝试在包管理器控制台中使用add-migration时,我不断收到此错误:'对象引用未设置为对象的实例'我正在使用entity framework version 5
,当我尝试使用版本6,但它不会看到我的DbContext,这是我的堆栈跟踪,请欢迎每一个建议.
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.
Run Code Online (Sandbox Code Playgroud)
您的重现中缺少一部分,但我发现其他人在这里报告了相同/类似的问题,因此我将使用他们的示例。这是重现:
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 }));
}
}
}
Run Code Online (Sandbox Code Playgroud)
EF5 中存在导致 NullReferenceException 的错误。由于不同的错误,这在 EF6 中也不起作用,但我相信这些都与这里无关。我认为这里的目的是将 Person 实体的一个导航属性映射到 Meeting 实体的两个导航属性,而 EF 不支持这一点(同样,仅通过查看 Person.Meeting 的内容也无法判断)收集用户是否作为客户或销售代理(或两者?)参加会议 - 您必须比较关键值/参考 - EF 只是不这样做)。为了解决这个问题,需要对模型进行如下更改:
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);
}
Run Code Online (Sandbox Code Playgroud)
现在,Person 属性上有两个导航属性,它们映射到 Meeting 实体上相应的导航属性。
归档时间: |
|
查看次数: |
4279 次 |
最近记录: |