我无法使用Entity Framework执行我认为非常简单的插入操作。在SO中有很多其他问题得到相同的例外,但它们都涉及删除记录,而不仅仅是插入。
数据库架构:
CREATE TABLE Centers (
id int IDENTITY(1, 1) NOT NULL,
...
)
CREATE TABLE Users (
id int IDENTITY(1, 1) NOT NULL,
idCenter int NOT NULL,
...
)
ALTER TABLE Users WITH CHECK ADD CONSTRAINT FK_Users_Centers
FOREIGN KEY(idCenter)
REFERENCES Centers (id)
我试图执行的插入操作:
using (var ctx = new MyCtx()) {
using (var trx = ctx.Database.BeginTransaction()) {
List<Center> centers = new List<Center> {
new Center { ... },
new Center { ... },
};
ctx.Centers.AddRange(centers);
ctx.SaveChanges();
List<User> users = new List<User> {
new User { idCenter = centers[0].id, ... },
new User { idCenter = centers[0].id, ... },
new User { idCenter = centers[1].id, ... },
new User { idCenter = centers[1].id, ... },
...
};
ctx.Users.AddRange(users);
ctx.SaveChanges();
trx.Commit();
}
}
我得到以下异常:
操作失败:无法更改关系,因为 一个或多个外键属性是不可为空的。当一个 改变了关系,相关的外键属性是 设置为空值。如果外键不支持空值, 必须定义新的关系,外键属性必须是 分配了另一个非空值,或者不相关的对象必须是 删除。
如果我尝试使用导航属性(new User { Center = centers[0], ... },
)设置用户和中心之间的关系,我也会得到同样的错误