Доступ к DBContext из экземпляра модели EF CodeFirst - PullRequest
1 голос
/ 18 ноября 2011

У меня есть экземпляр модели CodeFirst EF4.1 с именем Discussion.

Я хотел бы знать, как стандартные средства доступа к свойствам коллекции (например, Discussion.messages.get ниже) получают контекст БД, управляющий текущим объектом, потому что я хотел бы написать собственные средства доступа, которые работают стаким же образом.

По сути, я хочу знать, как реализовать this.GET_MANAGING_DB_CONTEXT () в следующем:

public class Discussion {

    // The default get; accessor seems to have access to the DBContext
    public virtual ICollection<Message> messages { get; set; }

    // How do I get access to the managing db context myself?
    public ICollection<Monkey> monkeys {
        get {
            return new List<Monkey>(from m in this.GET_MANAGING_DB_CONTEXT().Monkeys select m where m.discussion == this.ID));
        }
    }

    // Here's what I'm forced to do now, which requires passing DBContext around
    // everywhere the object is used, breaking encapsulation of data storage
    public ICollection<Monkey> monkeys(DBContext db) {
        return new List<Monkey>(from m in db.Monkeys...);
    }

    /* ... */
}

1 Ответ

1 голос
/ 18 ноября 2011

Я не уверен, что на 100% понимаю ваш вопрос, но вы, похоже, просите иметь отфильтрованный набор Обезьян, основанный на первичном ключе для текущего объекта.

Во-первых, вам не нужноDbContext для этого, Discussion.Id я предполагаю, что это значение PK, а Monkey.discussion это значение FK.

В codefirst я бы ожидал, что вы сделаете это

public class Discussion {

    public Discussion()
    {
        monkeys = new List<Monkey>();
    }

    ...

    [InverseProperty("discussion")]
    public ICollection<Monkey> monkeys { get; set; }

    ...
}

public class Monkey
{
    ...

    [InverseProperty("monkeys")]
    public Discussion discussion { get; set; }

    ...
}

Это должнопозволяют ссылаться на отфильтрованный набор Monkey на основе значения в поле обсуждения в таблице Monkey.

Если вам все еще нужен доступ к значению столбца обсуждения, взгляните на следующий ответ: Влияние первого имени столбца внешнего ключа в коде EF (CTP5)

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