DLINQ и контекстное соединение MS SQL Server 2005
От: Amba  
Дата: 29.08.06 14:01
Оценка: 5 (1)
Доброго всем времени суток!

Ситуация:
— таблица в БД означенного выше сервера — числовое поле с инкрементом и текстовое поле;
— добавляем (через сгенерённый DataContext) в эту таблицу новый элемент;
— вызываем context.SubmitChanges();
Результат:
— при работе через обычное (клиентское) соединение всё работает отлично!
— при работе через внутреннее (контестное) соединение вызов context.SubmitChanges() заканчивается в блоке catch с ThreadAbortException (при этом при работе через контекстное соединение функциональность выборки данных работает нормально).

Поможите кто чем может... пожалуйста!
Спасибо.
Re: DLINQ и контекстное соединение MS SQL Server 2005
От: Красин Россия  
Дата: 29.08.06 14:12
Оценка:
Здравствуйте, Amba, Вы писали:

А можно кусочек кода посмотреть, на котором можно будет вопроизвести проблему?
Re[2]: DLINQ и контекстное соединение MS SQL Server 2005
От: Amba  
Дата: 29.08.06 14:48
Оценка:
Здравствуйте, Красин, Вы писали:

К>Здравствуйте, Amba, Вы писали:


К>А можно кусочек кода посмотреть, на котором можно будет вопроизвести проблему?


Не вопрос:
как грицо ингридиенты: VS2005, LINQ CTP May 2006, SQL Server 2005, БД на сервера содержит наипростейшую таблицу с числовым и строковым полями, числовое — автоикрементируемое.
строка для запуск меппера для базы данных:
"C:\Program Files\LINQ Preview\Bin\SqlMetal.exe" /server:имя_сервера /database:название_БД /code:"D:\Projects\Путь_к_тестовому_проекту\OurDbContext.cs" /namespace:SomeCompany.SomeProject.SqlDataMapping /sprocs /pluralize
созданный файлик с классом-описанием нашей базы данных помещаем в отдельную сборку, которую подлкючаем затем к обоим проектам
на сервер загружаем сборки System.Data.DLing.dll и System.Query.dll
и в оба проекта добавляем на них сцылки
— код хранимой процедуры:
     [SqlProcedure]
        public static int clrsp_SubjectTest(out string message)
        {
            message = null;
            using (SqlConnection connection = new SqlConnection("Context connection = true"))
            {
                try
                {
                    connection.Open();
                    OurDbContext context = new OurDbContext(connection);
                    Subject subject = new Subject();
                    subject.Value = "test subject";
                    context.Subjects.Add(subject);
                    context.SubmitChanges();
                    return (int)StoredProcedureReturnCodes.Success;
}
                catch (Exception e)
                {//приходим сюда
                    message = e.Message;
                    return (int)StoredProcedureReturnCodes.Error;
                }
}
}

— код для работы с клиентской стороны:
     public void SubjectTest()
        {
OurDbContext DbContext = new OurDbContext(обычная строка подключения с вашему серверу);
            string msg = null;
            try
            {
                Subject subject = new Subject();
                subject.Value = "test subject";
                DbContext.Subjects.Add(subject);
                DbContext.SubmitChanges();// проходит нормально
            }
            catch (Exception e)
            {
                msg = e.Message;
            }
}
Re[3]: DLINQ и контекстное соединение MS SQL Server 2005
От: Красин Россия  
Дата: 29.08.06 15:16
Оценка:
Здравствуйте, Amba, Вы писали:

Большое спасибо! Вечером приду, посмотрю.
Re[3]: DLINQ и контекстное соединение MS SQL Server 2005
От: Amba  
Дата: 30.08.06 11:10
Оценка: 10 (1)
Здравствуйте, Amba, Вы писали:

A>Здравствуйте, Красин, Вы писали:


К>>Здравствуйте, Amba, Вы писали:


К>>А можно кусочек кода посмотреть, на котором можно будет вопроизвести проблему?


A>Не вопрос:

A>как грицо ингридиенты: VS2005, LINQ CTP May 2006, SQL Server 2005, БД на сервера содержит наипростейшую таблицу с числовым и строковым полями, числовое — автоикрементируемое.
A>строка для запуск меппера для базы данных:
A>"C:\Program Files\LINQ Preview\Bin\SqlMetal.exe" /server:имя_сервера /database:название_БД /code:"D:\Projects\Путь_к_тестовому_проекту\OurDbContext.cs" /namespace:SomeCompany.SomeProject.SqlDataMapping /sprocs /pluralize
A>созданный файлик с классом-описанием нашей базы данных помещаем в отдельную сборку, которую подлкючаем затем к обоим проектам
A>на сервер загружаем сборки System.Data.DLing.dll и System.Query.dll
A>и в оба проекта добавляем на них сцылки
A>- код хранимой процедуры:
A>
A>     [SqlProcedure]
A>        public static int clrsp_SubjectTest(out string message)
A>        {
A>            message = null;
A>            using (SqlConnection connection = new SqlConnection("Context connection = true"))
A>            {
A>                try
A>                {
A>                    connection.Open();
A>                    OurDbContext context = new OurDbContext(connection);
A>                    Subject subject = new Subject();
A>                    subject.Value = "test subject";
A>                    context.Subjects.Add(subject);
A>                    context.SubmitChanges();
A>                    return (int)StoredProcedureReturnCodes.Success;
A>}
A>                catch (Exception e)
A>                {//приходим сюда
A>                    message = e.Message;
A>                    return (int)StoredProcedureReturnCodes.Error;
A>                }
A>}
A>}
A>

A>- код для работы с клиентской стороны:
A>
A>     public void SubjectTest()
A>        {
A>OurDbContext DbContext = new OurDbContext(обычная строка подключения с вашему серверу);
A>            string msg = null;
A>            try
A>            {
A>                Subject subject = new Subject();
A>                subject.Value = "test subject";
A>                DbContext.Subjects.Add(subject);
A>                DbContext.SubmitChanges();// проходит нормально
A>            }
A>            catch (Exception e)
A>            {
A>                msg = e.Message;
A>            }
A>}
A>


Спасибо, как грицо всем участникам обсуждения за полезные и содержательные ответы
для серверного использования DLINQ для добавления данных в таблицу резольюшен будет такой:
                    Subject subject = new Subject();
                    subject.Value = "test subject";
                    context.Subjects.Add(subject);
                    context.LocalTransaction = connection.BeginTransaction();//+
                    context.LocalTransactionsOnly = true;//+
                    context.SubmitChanges();
                    context.LocalTransaction.Commit();//+

вот...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.