Entity Framework 4, Шаблон самопроверкаемых объектов T4, метод расширения ApplyChanges () - PullRequest
2 голосов
/ 08 июня 2010

Я использую EF4 и встроенный шаблон сущностей с самообследованием, чтобы генерировать мои энтиты из моей модели. Я также изменил шаблон T4 так, чтобы все ссылки на «ObjectContext» были изменены на «IObjectContext», и я применил интерфейс к автоматически сгенерированному контексту (все это было для целей тестирования и проверки).

//my interface
public interface IDatabaseEntities
{
    IObjectSet<Customer> Customers {get;}
    int SaveChanges();
}

//self tracking entity auto gen code, with my mods
public partial class DatabaseEntities : ObjectContenxt, IDatabaseEntities
{
    //auto gen stuff here
    public IObjectSet<Customer> Customers
    //more auto gen stuff
}

В шаблоне T4 они генерируют метод расширения ApplyChanges (), который работает только с объектами типа «ObjectSet». Поэтому я не могу вызвать "_context.Customers.ApplyChanges (customer);" потому что я работаю с типами "IObjectSet". Мне действительно нужно вызвать этот метод, чтобы обновить отдельную сущность !!! Так что теперь я не могу понять, как обновить свои сущности, так как я не работаю с конкретным классом ObjectSet.

1 Ответ

0 голосов
/ 29 сентября 2013

Как насчет метода расширения, подобного следующему:

public static class EntityFrameworkExtensions
{
    public static void ApplyChanges<TEntity>(this IObjectSet<TEntity> objectSet, TEntity entity)
        where TEntity : class
    {
        if (objectSet is ObjectSet<TEntity>)
        {
            ((ObjectSet<TEntity>)objectSet).ApplyChanges(entity);
        }
    }
}
...