Как удалить сущность в отношениях «многие ко многим», используя POCO - PullRequest
0 голосов
/ 14 июля 2010

Я использую POCO в сочетании с EF4, и некоторые сущности находятся в отношениях "многие ко многим", в моем случае объекты класса User и объекты класса PrivilegeGroup.

Вот как выглядит класс User:

public class User
{
    public int UserID { set; get; }
    public string UserName { get; set; }
    public string UserPassword { get; set; }
    public bool IsActive { get; set; }

    public List<PrivilegeGroup> PrivilegeGroups { get; set; }
}

А вот так выглядит класс PrivilegeGroup:

public class PrivilegeGroup
{
    public int PrivilegeGroupID { get; set; }
    public string Name { get; set; }

    public List<User> Users { get; set; }
    public List<HasPrivilege> HasPrivileges { get; set; }
}

Я расширил класс ObjectContext следующим образом:

public class AdminMDSContext : ObjectContext
{

    public AdminMDSContext(string connectionString)
        : base(connectionString)

    {
        this.DefaultContainerName = "MDSUsers_Entities";
        _users = CreateObjectSet<User>();
        _privilegeGroups = CreateObjectSet<PrivilegeGroup>();

    }


    private ObjectSet<User> _users;
    private ObjectSet<PrivilegeGroup> _privilegeGroups;

    public ObjectSet<User> Users
    {
        get { return _users; }
    }


    public ObjectSet<PrivilegeGroup> PrivilegeGroups
    {
        get { return _privilegeGroups; }
        set { _privilegeGroups = value; }
    }

}

Запросы и вставка этих объектов работают нормально, но удаление создает проблему, т. Е. Я хочу удалить PrivilegeGroup из одного пользователя без обратной связи db, но я не знаю, как это сделать.

Может кто-нибудь, пожалуйста, помогите мне?

1 Ответ

3 голосов
/ 14 июля 2010

Интересный вопрос. Вот как ты это делаешь.

var user = new User { UserId = 1 };
var admin = new Privilege { PrivilegeId = 1 };
user.Privileges.Add(admin);
db.Users.Attach(user);
user.Privileges.Remove(admin);
db.SaveChanges();

Всего существует 4 разных подхода к решению одной и той же проблемы. но я думаю из того, что вы мне говорите, этого должно быть достаточно, но если вам нужна дополнительная информация, вы можете пропинговать меня напрямую по почте

...