LINQ DataContext.SubmitChanges() в ссылке C# Reporting Object не указывает на экземпляр объекта.

Я думаю, что у многих людей была эта проблема, но я не могу ее исправить или понять, почему она у меня возникла. Рву на себе волосы уже пару часов.

Я получаю сообщение об ошибке «Ссылка на объект не указывает на экземпляр объекта». в моем datacontext.SubmitChanges() во ВТОРОЙ раз, когда этот метод запускается (я перебираю набор строк ObjectName):

    private Object CreateObject(string ObjectName, SystemClassEnum SystemClass)
    {
        Object result = new Object();
        result.Name = ObjectName;
        result.SystemClassID = (int)SystemClass;
        _dataContext.Objects.InsertOnSubmit(result);
        _dataContext.SubmitChanges();
        return result;
    }

Я думал, что это потому, что значение result.Name может быть нулевым, но я так больше не думаю.

Кажется, как-то закрывается dataContext? но в режиме отладки я проверяю состояние соединения, и оно «Открыто» после возникновения ошибки.

Я использую шаблон репозитория и ASP.NET MVC.

Результирующий объект (new Object()) является экземпляром автоматически сгенерированного класса LINQ DBML, который также имеет разделяемый класс, который я создал с присоединенным единственным методом расширения. Я не понимаю, как расширение класса может быть причиной проблемы.

У меня нет идей.

Есть предположения? Спасибо за любую помощь, которую вы можете предоставить!!

С наилучшими пожеланиями,

Эрик


person vealer    schedule 07.10.2009    source источник


Ответы (1)


Не называйте один из ваших типов Object — это очень плохая идея; вы пожалеете... выберите другое имя... (или System и т.д.).

Вы уверены, что ошибка на самом деле не в строке выше (_dataContext.Objects. и т. д.)? К сожалению, вы не показываете код, относящийся к _dataContext (например, мог ли он стать null), и вы не указываете, добавили ли вы (например) какие-либо методы partial в контекст данных или сущность, или провести какие-либо мероприятия. Я ожидаю, что проблема будет в одной из этих областей.

person Marc Gravell    schedule 07.10.2009
comment
Ах, но, Марк, использование таких имен — отличное запутывание кода. Таким образом, нет необходимости в каких-либо надоедливых обфускаторах после компиляции. Символы с диакритическими знаками и точками, которые не выделяются в кодировочных шрифтах, могут быть использованы для того, чтобы сделать их почти невозможными для обнаружения... :) namespace System { public class objẹct { } } - person KristoferA; 07.10.2009
comment
@KristoferA- больше похоже на отличный способ превратить ваш код в запись на ежедневном WTF. @Marc- +1 за то, что подчеркнул, какая это плохая идея! - person RichardOD; 07.10.2009
comment
@RichardOD Я был саркастичен... :) - person KristoferA; 07.10.2009
comment
Этот код находится в моем репозитории, и в его конструкторе я создаю экземпляр DataContext из моего DBML: private DataClassesDataContext _dataContext; public SQLServerMMRepository() { _dataContext = new DataClassesDataContext(); } Возникшая ошибка появляется в строке: _dataContext.SubmitChanges(); не: _dataContext.UserRelationshipInstances.InsertOnSubmit(результат); Я слышал, что вы говорите о капитальном объекте, которым я занимаюсь, но я не думаю, что проблема в этом. Почему мой контекст данных не стал бы ссылкой после повторных вызовов? - person vealer; 07.10.2009
comment
Я до сих пор не решил это. Есть предположения? Я думаю, что моя проблема заключается в том, что я хочу преобразовывать, преобразовывать, приводить, независимо от того, что объекты DBML возвращаются в РАЗНЫЕ классы, и чтобы эти классы также имели методы расширения, которые извлекают разные представления из базы данных. Создание экземпляра моего репозитория и бизнес-объектов, похоже, заставляет DataContext задыхаться. Любые идеи по архитектуре для меня? - person vealer; 09.10.2009