次のDBスキーマを使用します。
CREATE TABLE master (
id integer primary key autoincrement,
title text);
CREATE TABLE slave (
id integer primary key autoincrement,
master_id integer not null,
title text,
foreign key (master_id) references master (id));
sqliteデータベースを作成し、それを使用してEntityFramework.edmxファイルを作成しました。
次に、マスターレコードとスレーブレコードを追加します。これは正常に機能し、スレーブレコードを削除しようとしますが、例外が発生し、理由がわかりません。
var ctx = new blaEntities();
var newMaster = master.Createmaster(0);
ctx.masters.AddObject(newMaster);
var newSlave = slave.Createslave(0, 0);
newMaster.slaves.Add(newSlave);
ctx.SaveChanges(); // works fine, both id and master_id properties of newMaster
// and newSlave are then set with generated values.
newMaster.slaves.Remove(newSlave);
ctx.SaveChanges(); // InvalidOperationException is raised
例外のメッセージは次のとおりです。
操作が失敗しました:1つ以上の外部キープロパティがnull許容でないため、関係を変更できませんでした。リレーションシップに変更が加えられると、関連する外部キープロパティがnull値に設定されます。外部キーがnull値をサポートしていない場合は、新しい関係を定義するか、外部キープロパティに別の非null値を割り当てるか、関連のないオブジェクトを削除する必要があります。
私は何が間違っているのですか?
編集:
EFCreateslave(...)
メソッドによって生成されたものは次のとおりです。
public static slave Createslave(global::System.Int64 id, global::System.Int64 master_id)
{
slave slave = new slave();
slave.id = id;
slave.master_id = master_id;
return slave;
}