powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 6. Хранимая процедура с использованием EntityCommand
1 сообщений из 1, страница 1 из 1
EF 6. Хранимая процедура с использованием EntityCommand
    #38602721
Шамиль Фаридович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Необходимо собрать список сущностей по результату выполнения ХП, можно конечно использовать:
Код: c#
1.
ctx.Database.SqlQuery<Author>("GetAuthorByNickname @p0", name).ToList()


Но в этом случае заполнятся не все поля сущности Author , ибо некоторые из них помечены NotMapped и соответственно не будут считаны.
Нашел на MSDN пример:
http://msdn.microsoft.com/ru-ru/library/bb896274(v=vs.110).aspx
Можно ли его использовать при подходе CodeFirst?
Попробовал напрямую

Код: 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.
public class CatalogContext : DbContext
...
public static List<Author> RawStoreCommand(string name)
        {
            List<Author> result = new List<Author>();
            var ctx = new CatalogContext();
            using (var conn = (EntityConnection)((IObjectContextAdapter)ctx).ObjectContext.Connection)
            {
                conn.Open();
                // Create an EntityCommand.
                using (EntityCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "GetAuthorByNickname";
                    cmd.CommandType = CommandType.StoredProcedure;
                    EntityParameter pName = new EntityParameter();
                    pName.ParameterName = "name";
                    pName.Value = name;
                    cmd.Parameters.Add(pName);
                    

                    // Execute the command.
                    using (EntityDataReader rdr = cmd.ExecuteReader()) //ХХХ
                    {
                        // Read the results returned by the stored procedure.
                        while (rdr.Read())
                        {
                            Author author = new Author();
                            author.Id = rdr.GetInt32(0);
                            author.Nickname = rdr.GetString(1);
                            author.Birthdate = rdr.GetDateTime(2);
                            author.ArticlesCount = rdr.GetInt32(3);
                            result.Add(author);
                        }
                    }
                    conn.Close();
                }
            }
            return result;
        }


На строчке ХХХ вылетает exception:
Код: c#
1.
The value of EntityCommand.CommandText is not valid for a StoredProcedure command. The EntityCommand.CommandText value must be of the form 'ContainerName.FunctionImportName'


Если вместо Entity использовать DbConnection, DbCommand, SqlParameter, DbDataReader
Код: 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.
public static List<Author> RawStoreCommand(string name)
        {
            List<Author> result = new List<Author>();
            var ctx = new CatalogContext();
            using (var conn = ctx.Database.Connection)
            {
                conn.Open();
                // Create an EntityCommand.
                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "GetAuthorByNickname";
                    cmd.CommandType = CommandType.StoredProcedure;
                    SqlParameter pName = new SqlParameter();
                    pName.ParameterName = "name";
                    pName.Value = name;
                    cmd.Parameters.Add(pName);
                    

                    // Execute the command.
                    using (DbDataReader rdr = cmd.ExecuteReader())
                    {
                        // Read the results returned by the stored procedure.
                        while (rdr.Read())
                        {
                            Author author = new Author();
                            author.Id = rdr.GetInt32(0);
                            author.Nickname = rdr.GetString(1);
                            author.Birthdate = rdr.GetDateTime(2);
                            author.ArticlesCount = rdr.GetInt32(3);
                            result.Add(author);
                        }
                    }
                    conn.Close();
                }
            }
            return result;
        }


то все работает. EntityCommand работает только при ModelFirst и DBFirst подходах?
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 6. Хранимая процедура с использованием EntityCommand
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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