Обновить данные в ObjectContext в рамках сущности - PullRequest
1 голос
/ 20 февраля 2012

Я пытаюсь обновить данные в моем объектном наборе EntityFramework, но я получаю следующую ошибку: Уже есть открытый DataReader, связанный с этой командой, который должен быть закрыт первым.

Итак, у меня есть ObjectContextкоторый возвращает мне ObjectSet клиентов.Этот список клиентов я втыкаю в сетку.Ниже приведен фрагмент моего метода:

public class CustomerEntity : SECValidation.SECEntity
{
    ObjectSet<Customer> objectCustomer;

    public override void InitialiseObject()
    {
        objectCustomer = myObjectContext.CreateObjectSet<Customer>("Customers");
        objectCustomer.MergeOption = MergeOption.OverwriteChanges;
    }

    public override List<T> SelectRecords<T>()
    {
       return (from custDetails in objectCustomer.Include("Owner_Lookup")
           .Include("Business_Type_Lookup").Include("Assets").Include("Client")
           select custDetails).Cast<T>().ToList();
    }

        public override T SelectRecordByUNID<T>(int UN_ID)
        {
            return (from custDetails in objectCustomer.Include("Owner_Lookup").Include("Business_Type_Lookup").Include("Assets").Include("Client")
                    where custDetails.UN_Customer == UN_ID
                    select custDetails).Cast<T>().SingleOrDefault();
        }
}

Поэтому я создаю экземпляр моего класса CustomerEntity и вызываю InitialiseObject ().После этого я вызываю SelectRecords (), который предоставляет результаты для моей сетки.

У меня есть код измененного события SelectedIndex в сетке, который вызывает метод SelectRecordByUNID, передавая идентификатор клиента выбранной строки.При этом выбирается запись о клиенте, которая используется в другом месте.

Теперь, если кто-то обновит данные в другом месте (другой экземпляр приложения), я бы хотел обновить объект objectCustomer, чтобы увидеть эти изменения.

ОднакоМетод SelectRecords работает нормально, но когда вызывается метод SelectRecordByUNID, он завершается с ошибкой, о которой я упоминал выше.Ошибка говорит о том, что есть связанный DataReader, уже открытый с этой командой и закрывающий ее.Как можно обойти это, не закрывая Data Reader, поскольку открываются другие данные, связанные с источником данных в сетке клиента?

Я использую myObjectContext для создания набора объектов также для различных объектов.

Я использую c # и .Net4.0

Помогите мне, пожалуйста, и я надеюсь, что это имеет смысл!?!

Спасибо.

1 Ответ

0 голосов
/ 20 февраля 2012

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

Старайтесь не использовать Refresh в этом случае.Вы все равно выполняете запрос, поэтому попробуйте это вместо:

public override List<T> SelectRecords<T>()
{
   objectCustomer.MergeOption = MergeOption.OverwriteChanges;
   return (from custDetails in objectCustomer.Include("Owner_Lookup")
       .Include("Business_Type_Lookup").Include("Assets").Include("Client")
       select custDetails).ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...