VS 2012 (11.0.60315.01 Update 2)、C# 5、Entity Framework 5.0.0.0 (ランタイム v4.0.30319)
過去に同様の質問が投稿されたことは知っていますが、回答がないようです。私はエラーを理解していると思いますが、「望ましい」解決策を見つけることにもっと興味があります。 私がしたいのは、Child テーブルからレコードを削除することだけです。 誰でも助けることができますか?
これは完全で単純な例です。SaveChanges()は次の例外をスローします。
「操作に失敗しました: 1 つ以上の外部キー プロパティが null 値を許容しないため、関係を変更できませんでした。関係が変更されると、関連する外部キー プロパティが null 値に設定されます。外部キーは null 値をサポートしていません。新しい関係を定義する必要があります。外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。」
コードは次のようになります。
using System.Linq;
namespace EFDeleteTest
{
class Program
{
static void Main(string[] args)
{
using (EFTestEntities context = new EFTestEntities())
{
var parent = context.Parents.Single(p => p.Id == 1);
var child = parent.Children.Single(c => c.Id == 1);
parent.Children.Remove(child);
context.SaveChanges(); // Throws the above Exception
}
}
}
}
データベースは次のようになります。
Parent
Id (PK, int, not null) IDENTITY
Name (nvarchar(50), null)
Child
Id (PK, int, not null) IDENTITY
ParentId (FK, int, not null) -- Foreign Key to the Parent Table (Id column))
Name (nvarchar(50), null)
親テーブルには 1 つのレコード (Id = 1) があり、子テーブルには 2 つのレコード (Id の 1 と 2) があります。Child レコードは両方とも ParentId = 1 です。