powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Метод не сопоставлен как хранимая процедура или указанная пользователем функция.
4 сообщений из 4, страница 1 из 1
Метод не сопоставлен как хранимая процедура или указанная пользователем функция.
    #38388701
Ниггадяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Использую Linq2Sql.
Программа состоит из кучи модулей, каждый из которых имеет свой класс контекста.
Нужно привязать функцию из базы MSSQL.
Могу ли я осуществить эту привязку (мэпинг) не в классе контекста данных, а в отдельном классе? Может кто-то "страдал" подобным...
Это необходимо для избежания ситуации, когда данные полученные одним контекстом могут ссылаться на данные из другого контекста (при сохранении валится).

сделал такой фокус:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 internal class FQ 
    {
        private DataContext _ctx;
        public FQ(DataContext ctx)
        {
            _ctx = ctx;
        }

        [FunctionAttribute(Name = "[dbo].[info_Staff_SliceLast]", IsComposable = true)]
        internal IQueryable<StaffTransaction> StaffSlice([ParameterAttribute(Name = "moment", DbType = "datetime")] DateTime? moment, [ParameterAttribute(Name = "empl", DbType = "int")] int? empl)
        {
            var t = typeof(DataContext).Assembly.GetType("System.Data.Linq.DataQuery`1");
            t = t.MakeGenericType(typeof (StaffTransaction));

            return (IQueryable<StaffTransaction>)Activator.CreateInstance(t, _ctx, GetMethodCall(this, (MethodInfo) (MethodBase.GetCurrentMethod()), new object[]{moment,empl}));
        }

        private Expression GetMethodCall(object instance, MethodInfo methodInfo, params object[] parameters)
        {
            if (parameters.Length > 0)
            {
                ParameterInfo[] parameters2 = methodInfo.GetParameters();
                List<Expression> list = new List<Expression>(parameters.Length);
                int i = 0;
                int num = parameters.Length;
                while (i < num)
                {
                    Type type = parameters2[i].ParameterType;
                    if (type.IsByRef)
                    {
                        type = type.GetElementType();
                    }
                    list.Add(Expression.Constant(parameters[i], type));
                    i++;
                }
                return Expression.Call(Expression.Constant(instance), methodInfo, list);
            }
            return Expression.Call(Expression.Constant(instance), methodInfo);
        }
    }



При исполнении срабатывает исключение: Метод {метод} не сопоставлен как хранимая процедура или указанная пользователем функция. Мелкософтцы хрюшу подлажили, навтыкали проверок на рефлектед тип.
...
Рейтинг: 0 / 0
Метод не сопоставлен как хранимая процедура или указанная пользователем функция.
    #38388702
Ниггадяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Использую Linq2Sql.
Программа состоит из кучи модулей, каждый из которых имеет свой класс контекста.
Нужно привязать функцию из базы MSSQL.
Могу ли я осуществить эту привязку (мэпинг) не в классе контекста данных, а в отдельном классе? Может кто-то "страдал" подобным...
Это необходимо для избежания ситуации, когда данные полученные одним контекстом могут ссылаться на данные из другого контекста (при сохранении валится).

сделал такой фокус:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 internal class FQ 
    {
        private DataContext _ctx;
        public FQ(DataContext ctx)
        {
            _ctx = ctx;
        }

        [FunctionAttribute(Name = "[dbo].[info_Staff_SliceLast]", IsComposable = true)]
        internal IQueryable<StaffTransaction> StaffSlice([ParameterAttribute(Name = "moment", DbType = "datetime")] DateTime? moment, [ParameterAttribute(Name = "empl", DbType = "int")] int? empl)
        {
            var t = typeof(DataContext).Assembly.GetType("System.Data.Linq.DataQuery`1");
            t = t.MakeGenericType(typeof (StaffTransaction));

            return (IQueryable<StaffTransaction>)Activator.CreateInstance(t, _ctx, GetMethodCall(this, (MethodInfo) (MethodBase.GetCurrentMethod()), new object[]{moment,empl}));
        }

        private Expression GetMethodCall(object instance, MethodInfo methodInfo, params object[] parameters)
        {
            if (parameters.Length > 0)
            {
                ParameterInfo[] parameters2 = methodInfo.GetParameters();
                List<Expression> list = new List<Expression>(parameters.Length);
                int i = 0;
                int num = parameters.Length;
                while (i < num)
                {
                    Type type = parameters2[i].ParameterType;
                    if (type.IsByRef)
                    {
                        type = type.GetElementType();
                    }
                    list.Add(Expression.Constant(parameters[i], type));
                    i++;
                }
                return Expression.Call(Expression.Constant(instance), methodInfo, list);
            }
            return Expression.Call(Expression.Constant(instance), methodInfo);
        }
    }



При исполнении срабатывает исключение: Метод {метод} не сопоставлен как хранимая процедура или указанная пользователем функция. Мелкософтцы хрюшу подлажили, навтыкали проверок на рефлектед тип.
...
Рейтинг: 0 / 0
Метод не сопоставлен как хранимая процедура или указанная пользователем функция.
    #38388703
Ниггадяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Использую Linq2Sql.
Программа состоит из кучи модулей, каждый из которых имеет свой класс контекста.
Нужно привязать функцию из базы MSSQL.
Могу ли я осуществить эту привязку (мэпинг) не в классе контекста данных, а в отдельном классе? Может кто-то "страдал" подобным...
Это необходимо для избежания ситуации, когда данные полученные одним контекстом могут ссылаться на данные из другого контекста (при сохранении валится).

сделал такой фокус:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
 internal class FQ 
    {
        private DataContext _ctx;
        public FQ(DataContext ctx)
        {
            _ctx = ctx;
        }

        [FunctionAttribute(Name = "[dbo].[info_Staff_SliceLast]", IsComposable = true)]
        internal IQueryable<StaffTransaction> StaffSlice([ParameterAttribute(Name = "moment", DbType = "datetime")] DateTime? moment, [ParameterAttribute(Name = "empl", DbType = "int")] int? empl)
        {
            var t = typeof(DataContext).Assembly.GetType("System.Data.Linq.DataQuery`1");
            t = t.MakeGenericType(typeof (StaffTransaction));

            return (IQueryable<StaffTransaction>)Activator.CreateInstance(t, _ctx, GetMethodCall(this, (MethodInfo) (MethodBase.GetCurrentMethod()), new object[]{moment,empl}));
        }

        private Expression GetMethodCall(object instance, MethodInfo methodInfo, params object[] parameters)
        {
            if (parameters.Length > 0)
            {
                ParameterInfo[] parameters2 = methodInfo.GetParameters();
                List<Expression> list = new List<Expression>(parameters.Length);
                int i = 0;
                int num = parameters.Length;
                while (i < num)
                {
                    Type type = parameters2[i].ParameterType;
                    if (type.IsByRef)
                    {
                        type = type.GetElementType();
                    }
                    list.Add(Expression.Constant(parameters[i], type));
                    i++;
                }
                return Expression.Call(Expression.Constant(instance), methodInfo, list);
            }
            return Expression.Call(Expression.Constant(instance), methodInfo);
        }
    }



При исполнении срабатывает исключение: Метод {метод} не сопоставлен как хранимая процедура или указанная пользователем функция. Мелкософтцы хрюшу подлажили, навтыкали проверок на рефлектед тип.
...
Рейтинг: 0 / 0
Метод не сопоставлен как хранимая процедура или указанная пользователем функция.
    #38396088
Ниггадяй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Метод не сопоставлен как хранимая процедура или указанная пользователем функция.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]