有一个非常简单的脚本用于使用实体框架。我正在使用 Code First 方法,我有两个类:
public class First
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }
public string Name { get; set; }
}
public class Second
{
[Key]
public int Id { get; set; }
public virtual First Foreign { get; set; }
public DateTime Date {get; set; }
}
和上下文:
public class MyContext : DbContext
{
public MyContext() : base("MyConnection")
{ }
public DbSet<First> FirstTable { get; set; }
public DbSet<Second> SecondTable { get; set; }
}
然后我创建第二个实体的列表并尝试将它们添加到数据库中。同时,来自这个数组的不同 Seconds 可以有相同的 First 字段(通常的比例是 1 比 many)。
var f = new First {Id = 1, Name = "first"};
var s = new First { Id = 2, Name = "second" };
res = new List<Second>();
res.Add(new Second { Date = DateTime.Now, Foreign = f });
res.Add(new Second { Date = DateTime.Now, Foreign = s });
res.Add(new Second { Date = DateTime.Now, Foreign = f });
using (var ctx = new MyContext())
{
var firsts = new[] {f, s};
foreach (var item in firsts)
ctx.Entry(item).State = EntityState.Added;
foreach (var item in res)
{
ctx.FirstTable.Attach(item.Foreign);
ctx.SecondTable.Add(item);
}
ctx.SaveChanges();
}
看起来一切都很简单:在SrcondsTable表中有一个FirstTable表通过外键与SecondTable表以一对多的关系关联起来。
但在这里我遇到了一个例外
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.Seconds_dbo.Firsts_Foreign_Id". The conflict occurred in database "MyDatabase", table "dbo.Firsts", column 'Id'.
The statement has been terminated.
如何修复此错误?
您的代码过于复杂。删除行
和
-- 然后一切都会起作用。