MVC несколько коллекций одного и того же родительского объекта - PullRequest
0 голосов
/ 20 декабря 2011

Хорошо, так как все здесь в прошлый раз оказали большую помощь, я вернулся. Основная предпосылка такова:

Лицо может иметь обязанности перед другими Лицами.

Я определил сущности, подобные этой:

public class Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Responsibility> Responsibilities { get; set; }
}

public class Responsibility
{
    public int ResponsibilityId { get; set; }
    public string ResponsibilityType { get; set; }
    public virtual ICollection<Person> People { get; set; }
}

Однако, когда я добавляю Ответственность к Персоне, они заканчивают Ответственность за себя, даже если в Людях пусто, когда я добавляю Ответственность к Персоне.

Кроме того, если я добавлю Ответственность за Лицо А для Лица Б, то Лицо Б появится как ответственное за Лицо А:

Лицо А - Ответственность за Лицо А, Лицо Б Лицо B - Ответственность за Лицо B, Лицо A

Есть идеи, что я делаю не так?

UPDATE

Это мое назначение в БД

// 7. Responsability (Line Manager)
                List<Person> people = new List<Person>();

                people.Add(personB);

                var responsibility = new Responsibility() { Type = ResponsibilityType.LineManager, People = people };

                List<Responsibility> responsibilities = new List<Responsibility>();

                responsibilities.Add(responsibility);

                // 7.1 Assign to Person A
                personA.Responsibilities = responsibilities;

                db.SaveChanges();

Все еще приводит к тому, что PersonA имеет LineManger над PersonA и Person B, а Person B имеет LineManager через PersonA и PersonB

ПОСЛЕДНИЕ ОБНОВЛЕНИЯ

Кажется, это проблема, когда я вызываю db.SaveChanges (), так как до этого это было совершенно правильно. (

Ответы [ 3 ]

0 голосов
/ 20 декабря 2011

Использование EF4, только немного отличается, но результат тот же.

EF Diagram

    static void Main(string[] args)
    {
        var m = new Person { Id = 1, Name = "Mr Manager"};

        var r1 = new Person { Id = 2, Name = "Mr ReportsToManager"};
        var r2 = new Person { Id = 3, Name = "Mrs ReportsToManager"};

        var resp = new Responsibility
        {
            Id = 1,
            ResponsibilityType = "Manages",
        };
        resp.People.Add(r1);
        resp.People.Add(r2);

        m.Responsibilities.Add(resp);

        m.Responsibilities.First().People.ToList().ForEach(r => Console.WriteLine(r.Name));

    }

Mr ReportsToManager
Mrs ReportsToManager
0 голосов
/ 20 декабря 2011

Проверьте свойства идентификатора вашей сущности - они должны быть похожи на это.

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

Проверьте после вызова сохранения, что у вас фактически есть 3 человека, и используйте SQL, чтобы получить те же отношения сущности.

Id Properties

0 голосов
/ 20 декабря 2011

POCO версия - работает для меня, используя ваши классы. Примечание: я только добавил List <>, потому что мне лень, когда ICollection <> будет работать так же хорошо!

public class Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
    public virtual List<Responsibility> Responsibilities { get; set; }
}

public class Responsibility
{
    public int ResponsibilityId { get; set; }
    public string ResponsibilityType { get; set; }
    public virtual List<Person> People { get; set; }
}

static void Main(string[] args)
{
    var m = new Person { PersonId = 1, Name = "Mr Manager"};
    var r1 = new Person { PersonId = 2, Name = "Mr ReportsToManager"};
    var r2 = new Person { PersonId = 3, Name = "Mrs ReportsToManager"};

    var resp = new Responsibility
    {
        ResponsibilityId = 1,
        ResponsibilityType = "Manages",
        People = new List<Person>() { r1, r2 }
    };

    m.Responsibilities = new List<Responsibility>() { resp };

    m.Responsibilities.First().People.ForEach(r => Console.WriteLine(r.Name));

}

Mr ReportsToManager
Mrs ReportsToManager
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...