我有以下情况:
public class ObjectA
{
public ObjectA()
{
ObjectB = new HashSet<ObjectB>();
}
public Guid Id { get; set; }
public string SomeFieldA { get; set; }
public virtual ICollection<ObjectB> ObjectB { get; set; }
}
public class ObjectB
{
public Guid Id { get; set; }
public string SomeFieldB { get; set; }
public Guid? IdObjectA { get; set; }
public ObjectA ObjectA { get; set; }
}
public class DefaultContext : DbContext
{
public DbSet<ObjectA> ObjectA { get; set; }
public DbSet<ObjectB> ObjectB { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<ObjectA>()
.HasMany(b => b.ObjectB)
.WithOne(b => b.ObjectA)
.HasForeignKey(b => b.IdObjectA)
.OnDelete(Microsoft.EntityFrameworkCore.Metadata.DeleteBehavior.Cascade);
}
}
public class InsertClass
{
public void Insert()
{
ObjectA objA = new ObjectA();
objA.Id = Guid.NewGuid();
objA.ObjectB = new List<ObjectB>();
objA.ObjectB.Add(new ObjectB() { Id = Guid.NewGuid(), SomeFieldB = "SomeValue1" });
objA.ObjectB.Add(new ObjectB() { Id = Guid.NewGuid(), SomeFieldB = "SomeValue2" });
using (DefaultContext context = new DefaultContext())
{
context.Add(objA);
context.SaveChanges();
}
}
}
例外:
System.Data.SQLite.SQLiteException:约束失败FOREIGN KEY
EF Core版本1.0.0 / 1.0.1
注意:这只发生在RELEASE模式下,当您在DEBUG模式下尝试时,它可以正常工作。 有人知道这是一个错误,还是我错过了什么? 谢谢!
答案 0 :(得分:0)
我感觉它可能与null FK有关。您是否考虑过尝试为可空的“默认”(即GUID格式的全零)条目。而且我相信您可能需要指定FK何时更改(在这种情况下可比逻辑)然后您需要向EFC指示实体的状态是未更改/已修改/已添加或已删除..