"关系无法改变"使用实体框架的异常

时间:2016-07-06 09:34:34

标签: c# entity-framework

我无法使用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], ... },)设置用户和中心之间的关系,我也会得到同样的错误

0 个答案:

没有答案