2

こんにちは、エンティティ フレームワークを使用してデータベースを設定しています。1 対多の関係エンティティがあり、カスケード削除せずに親エンティティのみを削除したいと考えています。保護者からの削除でエラーが発生しましたが、記録の理由として子供を残しておきたいです。エラーなしで親だけを削除する方法はありますか?

4

1 に答える 1

2

これは古い質問ですが、今日この問題に遭遇したので、見つけた解決策を共有します。

簡単に言うと、子アソシエーションを熱心にロードする必要があるということです。リレーションシップが正しく設定されていて、 a Foohas many があると仮定するとBars、このコードはまさにあなたが望むことを行うはずです:

    public void Delete(Guid fooId)
    {
        using (var context = new MyDbContext())
        {
            var foo = context.Foos.Include("Bars").FirstOrDefault(foo => foo.Id == fooId);
            if (foo != null)
            {
                context.Foos.Remove(foo);
                context.SaveChanges();
            }
        }
    }

ここで重要なのは、 への呼び出し.Includeです。これがないと、更新は外部キー違反で失敗します。

ここで、関係が正しく設定されていると仮定すると、次のようになるはずです。

// Foo.cs
public class Foo
{
    public Guid Id { get; set; }

    public ICollection<Bar> Bars { get; set; }
}

// Bar.cs
public class Bar
{
    public Guid Id { get; set; }

    public Guid? FooId { get; set; }

    public virtual Foo Foo { get; set; }
}

// MyDbContext
modelBuilder.Entity<Foo>()
    .HasMany(e => e.Bars)
    .WithRequired(e => e.Foo)
    .HasForeignKey(e => e.FooId)
    .WillCascadeOnDelete(false);
于 2015-10-06T04:17:09.990 に答える