1

私は関係のある2つのテーブルを持っています:

    modelBuilder.Entity<User>()
        .HasOptional(u => u.Subscription)
        .WithMany();

どうすれば関係を削除できますか?サブスクリプションを削除したいのですが、すべてのユーザーを残します。サブスクリプションEFスロー例外を削除すると、次のようになります。

"The DELETE statement conflicted with the REFERENCE constraint
\"FK_Users_Subscriptions_Subscription_Id\". 
The conflict occurred in database \"db\",table \"dbo.Users\",
column 'Subscription_Id'.\r\nThe statement has been terminated.

そして、ユーザーからサブスクリプションへのアクセスが必要です。

4

1 に答える 1

1

サブスクリプションを削除するときは、そのサブスクリプションを持つすべてのユーザーのサブスクリプション参照がnullに設定されていることを確認する必要があります。そうしないと、データベースの外部キー制約に違反します。コンテキストに削除するには、サブスクリプションをユーザーにロードするだけで十分だと思います。EFは関係を自動的に修正します。

using (var ctx = new MyContext())
{
    var subscriptionToDelete = ctx.Subscriptions.Find(subscriptionToDeleteId);
    ctx.Users.Where(u => u.Subscription.Id == subscriptionToDeleteId).Load();

    ctx.Subscriptions.Remove(subscriptionToDelete);

    ctx.SaveChanges();
}
于 2012-06-23T13:38:46.757 に答える