![](/img/trans.png)
[英]The INSERT statement conflicted with the FOREIGN KEY constraint in Entity Framework database first
[英]Entity Framework code first INSERT statement conflicted with the FOREIGN KEY constraint
我首先在Sqlserver 2008 R2中使用EF6代码。
以下是我的模型课程
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 System.DateTime DateOfBirth { get; set; }
}
public class NinjaEquipment
{
public int Id { get; set; }
public string ClanName { get; set; }
public EquipmentType Type { get; set; }
[Required]
public Ninja Ninja { get; set; }
}
public class Clan
{
public int Id { get; set; }
public string ClanName { get; set; }
public List<Ninja> Ninjas { get; set; }
}
和DbContext类如下,
public class NinjaContext: DbContext
{
public DbSet<Ninja> Ninjas { get; set; }
public DbSet<Clan> Clans{ get; set; }
public DbSet<NinjaEquipment> Equipment { get; set; }
}
这是我的程序课,
class Program
{
static void Main(string[] args)
{
InsertNinja();
Console.ReadKey();
}
private static void InsertNinja()
{
var ninja = new Ninja
{
Name = "JulieSan",
ServedInOniwaban = false,
DateOfBirth = new DateTime(1980,1,1),
ClanId = 1,
};
using (var context= new NinjaContext())
{
context.Database.Log = Console.WriteLine;
context.Ninjas.Add(ninja);
context.SaveChanges();
}
}
}
在运行代码之前,我已在Clan表中插入了值。 氏族表中存在一行,如下所示,为1,“氏族名称”。 现在,在程序类中运行代码时,我试图在名为Ninja的表中插入行,因为Ninja表的外键为ClanId,我提供的clanId为1,所以它不应抛出外键约束。
当我尝试运行该程序时,出现以下错误,{“ INSERT语句与FOREIGN KEY约束\\“ FK_dbo.Ninjas_dbo.Clans_ClanId \\”冲突。冲突发生在数据库\\“ NinjaDomain.DataModel.NinjaContext \\”,表\\ “ dbo.Clans \\”,列'Id'。\\ r \\ n该语句已终止。“}
另一方面,当我尝试针对db在sql脚本下运行时,我可以成功运行它,
INSERT [dbo].[Ninjas]([Name], [ServedInOniwaban], [ClanId], [DateOfBirth])
VALUES ('JulieSan', 'False', '1', '01-01-1980 00:00:00' )
SELECT [Id]
FROM [dbo].[Ninjas]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
实际上,这与数据库服务器名称有关。 我在EF适配器中使用名称为(localdb)\\ mssqllocaldb的数据库,因此所有数据库模式都是在EF适配器项目中创建的。 然后我在该演示文稿项目中添加了控制台应用程序并安装了EF。在演示文稿项目(控制台应用程序)中添加了EF之后,默认情况下会创建App.Config,因此我从EF适配器项目中删除了app.config。 因此,控制台应用程序的app.config指向。\\ SqlExpress db而不是(localdb)\\ mssqllocaldb。 我的错。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.