Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Метод не сопоставлен как хранимая процедура или указанная пользователем функция. / 4 сообщений из 4, страница 1 из 1
06.09.2013, 09:44
    #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
06.09.2013, 09:44
    #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
06.09.2013, 09:44
    #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
13.09.2013, 14:21
    #38396088
Ниггадяй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод не сопоставлен как хранимая процедура или указанная пользователем функция.
up
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Метод не сопоставлен как хранимая процедура или указанная пользователем функция. / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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