Ho il seguente scenario:
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();
}
}
}
L'eccezione:
System.Data.SQLite.SQLiteException: vincolo non riuscito FOREIGN KEY
EF Core versione 1.0.0 / 1.0.1
NOTA: ciò accade solo in modalità RELEASE, quando lo si prova in modalità DEBUG, funziona correttamente. Qualcuno ha qualche idea se si tratta di un bug, o mi sto perdendo qualcosa? Grazie!
Ho la sensazione che potrebbe essere correlato al FK null. Avete considerato di provare una voce "predefinita" (cioè tutti gli zeri in formato GUID) per il nullable. E credo che potrebbe essere necessario specificare quando l'FK è cambiato (logica comparabile in questo caso), quindi è necessario indicare a EFC che lo stato dell'entità è Invariato / Modificato / Aggiunto o Eliminato ..