【发布时间】:2012-02-08 21:06:56
【问题描述】:
EF 4.1 数据库优先方法。
假设我有这个表架构
用户 1---M 用户角色 M---1 角色
在外键中设置级联删除
UserRoles 表具有其他列,例如 CreatedDate,因此我为 UserRoles 创建了一个模型并进行了相应的映射。
我最终得到以下模型:
User
----
int Id
string Name
List<UserRoles> UserRoles
UserRoles
---------
int UserId
int RoleId
DateTime CreatedDate
User User
Role Role
Role
----
int Id
string Name
List<UserRoles> UserRoles
如果我的配置正确,我是否可以删除用户,并且是否可以删除用户角色行而无需手动清除 UserRoles 集合?
那么我可以这样做吗:
DbContext.Entry(user).State = EntityState.Deleted;
DbContext.SaveChanges();
或者我必须这样做:
user.UserRoles.Clear();
DbContext.Entry(user).State = EntityState.Deleted;
DbContext.SaveChanges();
我的测试显示我必须清除子集合,但我发现有冲突的信息表明,如果我正确进行了级联删除设置,它应该仅通过删除用户来工作。
当我不清除 UserRoles 时,我收到此错误:
无法更改关系,因为其中一项或多项 外键属性不可为空
感谢您帮助澄清这一点!
【问题讨论】:
标签: entity-framework entity-framework-4 entity-framework-4.1 ef-code-first