私は次のシナリオを持っています:
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コアバージョン1.0.0 / 1.0.1
NOTE:これはRELEASEモードでのみ起こります。DEBUGモードで試してみるとうまくいきます。誰かがバグかどうか考えているのですか、何か不足していますか?ありがとう!
私はそれがnull FKに関連しているかもしれないという気持ちがあります。あなたがnullableのための "デフォルト"(つまり、GUID形式のすべてのゼロ)項目を試してみることを考えましたか?そして、あなたがFKが変更されたとき(この場合は同等のロジック)を指定する必要があると思われる場合は、エンティティの状態が変更/変更/追加または削除されていることをEFCに示す必要があります。