Linq 2 SQL - Ручная привязка данных не работает - PullRequest
1 голос
/ 13 октября 2009

Я использую linq2sql в своем приложении asp.net. При использовании его с объектом linq2sqldatasource все работает, я имею в виду, что я связываю его без кода с элементом управления detailsview. Моя идея заключается в том, что когда я щелкаю строку в элементе detailscontrol, он загружает / добавляет на ту же страницу настраиваемый веб-элемент управления, который позволяет редактировать данные. Для этого мне нужно загрузить некоторые элементы, чтобы заполнить выпадающие списки в этом пользовательском контроле, и в его событии загрузки у меня есть следующий код, который не работает, и я не могу понять, почему. Это вызывает исключение нулевой ссылки объекта.

пример:


        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                //loads combobox with  organizations
                using (MyDataContext cdc = new MyDataContext())
                {
                    var queryOrgs = from p in cdc.orgUnits
                                    select p;

                    //Organizations
                    dropDownOrgs.DataSource = queryOrgs.ToList();
                    dropDownOrgs.DataValueField = "orgUnitID";
                    dropDownOrgs.DataTextField = "orgUnitName";
                    dropDownOrgs.DataBind();
                }
            }
        }

Кто-нибудь знает, что происходит? Похоже, когда я хочу связать все вручную, что-то не работает: (

Надеюсь, ты сможешь мне помочь.

Спасибо. Тейшейра

1 Ответ

1 голос
/ 13 октября 2009

@ Чалки прав. Я сам столкнулся с этой ошибкой, когда из-за того, что LINQ to SQL выполняет «ленивые» запросы, он ожидает до последней минуты, чтобы фактически выполнить запрос.

Это означает, что он может подождать, пока функция page_load не выполнит запрос (и, следовательно, за пределами оператора using).

Поэтому верните данные в виде списка с помощью .ToList (), чтобы заставить его немедленно выполнить запрос.

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        //loads combobox with  organizations
        using (MyDataContext cdc = new MyDataContext())
        {
            List<orgUnit> queryOrgs = (
                from p in cdc.orgUnits
                select p
                ).ToList();

            //Organizations
            dropDownOrgs.DataSource = queryOrgs.ToList();
            dropDownOrgs.DataValueField = "orgUnitID";
            dropDownOrgs.DataTextField = "orgUnitName";
            dropDownOrgs.DataBind();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...