Запутался в присоединении/отсоединении сущностей в EF

Используя ASP.NET MVC и Entity Framework, я сталкиваюсь с некоторыми ошибками присоединения/отсоединения, когда мне это нужно для записи изменений в базу данных.

Сначала вот как я получаю записи из моего репозитория:

public PublishedApplication GetPublishedApplication(int id)
{
    return dal.ExecuteFirstOrDefault(
        context.PublishedApplication.Include("Customers")
        .Where(w => w.Id == id));
}

Обратите внимание, что он не отсоединен и имеет MergeOption = AppendOnly.

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

public void AttachCustomer(int applicationId, int customerId)
{
    var app = new PublishedApplication{ Id = applicationId};
    var customer = new Customer { Id = customerId};

    try
    {
        context.AttachTo("PublishedApplication", app);
        context.AttachTo("Customer ", customer );

        app.Customers.Add(customer);

        context.SaveChanges();
    }
    catch
    {
        throw;
    }
}

Это, конечно, дает мне ошибку, что объекты (приложение и клиент) уже привязаны к контексту объекта.

Поэтому мне нужно отсоединить мои объекты в моем репозитории. Это также более правильно, поскольку мне не нужно разбрасывать «информацию, связанную с запросом» по сети. Но как я могу это сделать? Если я отсоединю объект в своем методе GetPublishedApplication, мой график связанных данных будет потерян, а я не могу себе этого позволить. Мне нужен этот график в другом месте на моем сайте. Также нельзя использовать параметр слияния NoTracking.

Итак, какие варианты у меня есть?

Заранее спасибо!


person Tommy Jakobsen    schedule 24.08.2009    source источник
comment
Вы говорите, что не можете использовать NoTracking. Интересно, почему бы и нет? Это кажется идеальным для ваших нужд.   -  person Alex James    schedule 25.08.2009
comment
Кажется, с одной стороны, вы хотите, чтобы ваши сущности были отсоединены? т.е. так что вы получаете «Без отслеживания изменений». Но тогда вы говорите, что не можете использовать опцию слияния NoTracking? Мне это кажется странным. Алекс   -  person Alex James    schedule 25.08.2009
comment
Если я установлю NoTracking, не будет ли он по-прежнему отслеживать связанный граф объектов?   -  person Tommy Jakobsen    schedule 27.08.2009


Ответы (1)


Я думаю, что нет простого решения для повторного присоединения объектов.
Возможно, этот пост поможет вам: Повторное присоединение графиков сущностей с помощью Entity Framework на codeproject.com

person Puzzled    schedule 15.09.2009