EF6从父级而不是从dbContext

时间:2017-01-10 22:46:40

标签: c# entity-framework entity-framework-6

我有这个用户的POCO类,其中包含Id和一组RoleUser对象以及其他属性

public class SystemUser : IEntity
{
    public int Id { get; set; }

    [MaxLength(50)]
    [Index("ExternalUserIdIndex",IsUnique = true)]
    public string ExternalUserId { get; set; }
    public virtual ICollection<RoleUser> UserRoles { get; set; }
}

我的RoleUser类就是这个

public class RoleUser : IEntity
{
    public int Id { get; set; }
    public int SystemUserId { get; set; }
    public virtual Role Role { get; set; }
}

Role类与此问题无关。我有一些种子方法用于添加具有某些角色的默认用户,在添加角色之前我删除了现有角色。我试图做以下事情:

var user = context.SystemUsers.FirstOrDefault(u => u.ExternalUserId == "extId");

正如您所看到的,我的dbContext跟踪了这个实例。然后我先尝试了:

user.UserRoles.Clear();
//add roles

但是我在运行种子方法时得到了这个:

  

由于一个或多个外键属性不可为空,因此无法更改关系。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

然后我试了

user.UserRoles.ToList().ForEach(r => developerPaco.UserRoles.Remove(r));

得到同样的错误。最后我做了:

user.UserRoles.ToList().ForEach(r=>context.RoleUsers.Remove(r)); 

它有效。所以我想理解为什么它不起作用。

注意:我通过更改我的RoleUser类来完成前两次尝试,如下所示:

public class RoleUser : IEntity
{
    public int Id { get; set; }
    public int? SystemUserId { get; set; }
    public virtual Role Role { get; set; }
}

制作可以为空的SystemUserId,但是我只是获取具有空值的数据而不是按照我的意愿删除。

0 个答案:

没有答案