MVC Code First - 级联删除1对1关系

时间:2014-10-01 05:39:14

标签: c# asp.net-mvc entity-framework entity-framework-6

我有UserProfile实体,他们有1-1关系。

用户实体和配置

public class User
{
    public int ID { get; set; }
    public virtual Profile Profile { get; set; }
}

public class UserConfig : EntityTypeConfiguration<User>
{
    public UserConfig()
    {
        HasRequired(x => x.Profile).WithRequiredPrincipal(x => x.User);
    }
}

个人资料实体和配置

public class Profile
{
    public int ID { get; set; }
    public virtual User User { get; set; }
}

public class ProfileConfig : EntityTypeConfiguration<Profile>
{
    public ProfileConfig()
    {
        HasRequired(x => x.User).WithRequiredDependent(x => x.Profile).Map(x => x.MapKey("UserID")).WillCascadeOnDelete(true);
    }
}

但是,当我尝试删除用户列表时,我会在下面看到此例外:

List<User> users = _user.Where(x => m.SelectedUsersID.Contains(x.ID)).ToList();
users.ForEach(x => _user.Remove(x));

A relationship from the 'Profile_User' AssociationSet is in the 'Deleted' state. Given multiplicity constraints, a corresponding 'Profile_User_Source' must also in the 'Deleted' state.

我不知道出了什么问题,请帮忙:)

2 个答案:

答案 0 :(得分:0)

您正在删除用户但未将用户配置为级联删除。这意味着不会删除配置文件并违反数据库的完整性。 EF会阻止数据库,从而引发错误。

您也应该配置为级联删除。

答案 1 :(得分:0)

好的,我可以通过删除这两个实体来解决这个问题。这意味着我必须删除ProfileUser两者

users.ForEach(x => _profile.Remove(x.Profile));
users.ForEach(x => _user.Remove(x));