【问题标题】:EF Core SQLite - Foreign Key nullable child insert (release)EF Core SQLite - 外键可为空的子插入(发布)
【发布时间】:2017-02-15 19:54:00
【问题描述】:

我有以下场景:

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 模式下尝试时,它工作正常。 有人知道这是一个错误,还是我错过了什么? 谢谢!

【问题讨论】:

    标签: c# sqlite ef-code-first entity-framework-core .net-core


    【解决方案1】:

    我感觉这可能与 null FK 有关。您是否考虑过为可空对象尝试“默认”(即 GUID 格式的全零)条目。而且我相信您可能需要指定 FK 何时更改(在这种情况下是可比较的逻辑),然后您需要向 EFC 指示实体的状态是未更改/已修改/已添加或已删除..

    【讨论】:

      猜你喜欢
      • 2021-10-27
      • 2020-10-18
      • 2019-11-26
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多