我正在遵循EF6的多重视觉课程。 (我知道,我知道。我很慢。向我起诉。)
我有一个Clans
表,该表中预先填充了以下值:
ID Name
-- --------------
1 Vermont Ninjas
ID
是主键列。同样,我有一个Ninjas
表,其中ClanId
作为Clans
表的外键。在我的应用程序中,我有以下代码:
private static void InsertNinja()
{
var ninja = new Ninja
{
Name = "JulieSan",
ServedInOniwaban = false,
DateOfBirth = new DateTime(1980, 1, 1),
ClanId = 1
};
using (var context = new Db())
{
context.Database.Log = Console.WriteLine;
context.Ninjas.Add(ninja);
context.SaveChanges();
}
}
但是,对context.SaveChanges()
的调用失败,并带有模糊的消息:“更新条目时发生错误。有关详细信息,请参阅内部异常。”稍后出现三个内部异常,并出现以下消息:
INSERT语句与FOREIGN KEY约束冲突 “ FK_dbo.Ninjas_dbo.Clans_ClanId”。数据库中发生了冲突 “ NinjaDomain.DataModel.Db”,表“ dbo.Clans”,列“ Id”。的 语句已终止。
很明显,数据库中存在值1
。为什么会发生此错误,我该如何解决?
根据要求:
namespace NinjaDomain.Classes
{
using System;
using System.Collections.Generic;
public class Ninja
{
public int Id { get; set; }
public string Name { get; set; }
public bool ServedInOniwaban { get; set; }
public Clan Clan { get; set; }
public int ClanId { get; set; }
public List<NinjaEquipment> EquipmentOwned { get; set; }
public DateTime DateOfBirth { get; set; }
}
public class Clan
{
public int Id { get; set; }
public string ClanName { get; set; }
public List<Ninja> Ninjas { get; set; }
}
}
app.config
文件包含以下信息:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
服务器资源管理器显示我有两个localdb
实例:
(localdb)\MSSQLLocalDB
(ID为1的氏族所在的地方)
(localdb)\ProjectsV13
(不存在表)
似乎表是在(localdb)\MSSQLLocalDB
中创建的,但是它正在尝试从(localdb)\ProjectsV13
检索数据。
我是否只需要重新运行update-database
命令以在正确的本地数据库中创建数据库?