EF Code First: Конфигурация модели - PullRequest
0 голосов
/ 18 октября 2011

Я постараюсь быть максимально ясным:

Моя цель: прочитать конфигурацию модели, которую я объявил в моем переопределенном OnModelCreating внутри моего класса Entity, полученного из DbContext.

Причина: для создания общего метода void Update<T>(T toUpdate) на моем слое данных, где я получаю, какие поля являются первичным ключом для T, извлекаю их для переданного объекта toUpdate и использую их в методе Set<T>().Find.

Это позволило бы мне не жестко кодировать логику поиска для каждого типа объекта, с которым я работаю.

Мне нужно извлечь сохраненную сущность, чтобы применить обновления, например:

var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues);
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);

Я застрял в том моменте, что в моем экземпляре _entities (который, конечно, является моим классом сущностей, производным от DbContext) я не могу найти, где хранится конфигурация модели.

Кто-нибудь может указать мне правильное направление?

Спасибо.

1 Ответ

1 голос
/ 18 октября 2011

Вы можете найти код для получения имен ключевых свойств типа сущности YourEntity здесь:

Код Entity Framework первым. Найти первичный ключ

А затем получить значения:

public Update<T>(T toUpdate)
{
    // Code from link above with YourEntity = T

    List<object> myRetrievedKeyValues = new List<object>();
    foreach (var keyName in keyNames)
        myRetrievedKeyValues.Add(toUpdate.GetType().GetProperty(keyName)
            .GetValue(toUpdate, null));

    var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues.ToArray());
    _entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate);
}

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

Также не забывайте, что CurrentValues.SetValues будет обновлять только скалярные и сложные свойства. Это не поможет вам обновить свойства навигации. Вам придется использовать неуниверсальный код для обновления отношений, характерных для каждого типа сущности.

...