Ich habe einige Schwierigkeiten mit der folgenden Ausnahme: "Objektreferenz nicht auf eine Instanz eines Objekts gesetzt."C# entity-framework Objekt Referenz Ausnahme
-Code-First Migration bei EntityFramework MVC5
public class Driver
{
[Key]
public int NumberId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Age { get; set; }
public string TeamName { get; set; }
public Team Team { get; set; }
}
die Konfiguration:
namespace f1app.Migrations.F1app
{
using Data;
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
internal sealed class Configuration : DbMigrationsConfiguration<f1app.Data.F1appContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\F1app";
}
protected override void Seed(f1app.Data.F1appContext context)
{
context.Teams.AddOrUpdate(
t => t.TeamName, DummyData.getTeams().ToArray());
context.SaveChanges();
context.Drivers.AddOrUpdate(
d => new { d.FirstName, d.LastName }, DummyData.getDrivers(context).ToArray());
}
}
}
und das Initial erstellen:
namespace f1app.Migrations.F1app
{
using System;
using System.Data.Entity.Migrations;
public partial class InitialCreate : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Drivers",
c => new
{
NumberId = c.Int(nullable: false, identity: true),
FirstName = c.String(),
LastName = c.String(),
Age = c.String(),
TeamName = c.String(maxLength: 30),
})
.PrimaryKey(t => t.NumberId)
.ForeignKey("dbo.Teams", t => t.TeamName)
.Index(t => t.TeamName);
CreateTable(
"dbo.Teams",
c => new
{
TeamName = c.String(nullable: false, maxLength: 30),
City = c.String(),
Founded = c.String(),
})
.PrimaryKey(t => t.TeamName);
}
public override void Down()
{
DropForeignKey("dbo.Drivers", "TeamName", "dbo.Teams");
DropIndex("dbo.Drivers", new[] { "TeamName" });
DropTable("dbo.Teams");
DropTable("dbo.Drivers");
}
}
}
als einige Dummy-Daten für die Fahrer erhalten zu bekommen in die Tabelle ....
public static List<Driver> getDrivers(F1appContext context)
{
List<Driver> drivers = new List<Driver>(){
new Driver{
NumberId=5,
FirstName="Sebastian",
LastName="Vettel",
Age="29",
TeamName=context.Teams.Find("Ferrari").TeamName,
},
new Driver{
NumberId=44,
FirstName="Lewis",
LastName="Hamilton",
Age="32",
TeamName= context.Teams.Find("Mercedes").TeamName
},
new Driver{
NumberId=19,
FirstName="Felipe",
LastName="Massa",
Age="36",
TeamName=context.Teams.Find("Williams").TeamName
}
};
return drivers;
}
und die PM-Konsole für das Update verwenden - update-database -ConfigurationTypeName f1app.Migrations.F1app.Configuration
. Aber nur die Tabelle für die Teams funktioniert gut, die Drivers Table bekommt keine Daten .... Irgendeine Idee warum?
Erste Schätzung würde sein, dass die 'context.Teams.Find (" Ferrari ") .TeamName' Zeilen fehlschlagen, da die' Find' keine Daten zurückgibt. Gibt es Teams mit diesen Schlüsseln im Kontext? Könnten Sie auch Ihren Code für 'DummyData.getTeams()' – Thewads
hinzufügen? Ihr 'getTeams' Code fehlt. – tschmit007
Ihr 'TeamName = context.Teams.Find (" Williams "). TeamName' ist seltsam. 'TeamName =" Williams "' sollte genug sein – tschmit007