使用以下数据库模式:
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 数据库,然后我用它来创建一个实体框架 .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
异常的消息是:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
我究竟做错了什么?
编辑:
这是由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;
}