Ошибка SQL EntityCommand - PullRequest
       6

Ошибка SQL EntityCommand

2 голосов
/ 05 февраля 2012

У меня проблема в предложении select в моем запросе. Этот sql-запрос работает в SqlServer Management Studio и выбирает запрошенные данные, но в моем классе выдает ошибку «Синтаксис запроса недопустим. Рядом с термином« * », строка 9, столбец 47». затем еще одна ошибка в моем предложении From Forums F, то есть после удаления LastPostBy, LastPostDate, LastPostTitle я также получаю сообщение об ошибке в LastPostTitle, но, как я уже сказал, он работает в SQLServer Management Studio. Первоначально я попытался сделать хранимую процедуру «Exec sproc_Forums_GetForums», и это не сработало, это моя первая попытка использовать этот подход в Entities. Предполагается, что все, что мне нужно сделать, это получить форум и отобразить информацию из двух таблиц с именами Форумы и Сообщения

    public List<Forum> GetForums()
    {
        List<Forum> forums = null;
        using (EntityConnection conn = new EntityConnection("name=CMSEntities"))
        {
            conn.Open();
            string query = @"
                SELECT ForumGroup = (
                    CASE WHEN ParentID IS NOT NULL THEN
                        (SELECT Title FROM Forums WHERE ForumID = F.ParentID)           
                    ELSE
                        (SELECT Title FROM Forums WHERE ParentID IS NULL)
                    END),
                F.Title, F.Description, 
                ThreadCount = (SELECT COUNT(*) FROM Posts P WHERE P.ForumID = F.ForumID),
                LastPostBy = (SELECT TOP 1 AddedBy FROM Posts P WHERE P.ForumID = F.ForumID ORDER BY P.PostID DESC), 
                LastPostDate = (SELECT TOP 1 AddedDate FROM Posts P WHERE P.ForumID = F.ForumID ORDER BY P.PostID DESC),
                LastPostTitle = (SELECT TOP 1 Title FROM Posts P WHERE P.ForumID = F.ForumID ORDER BY P.PostID DESC)     
                FROM Forums F WHERE ParentID IS NOT NULL    
                ORDER BY Title
            ";
            EntityCommand cmd = new EntityCommand(query, conn);
            using (EntityDataReader reader = cmd.ExecuteReader(System.Data.CommandBehavior.SequentialAccess))
            {
                while (reader.Read())
                {
                    Forum forum = new Forum(
                        (int)reader["ForumID"],
                        "",
                        DateTime.Now,
                        reader["Title"].ToString(),
                        reader["Description"].ToString(),
                        0,
                        false,
                        null,
                        null,
                        null,
                        true,
                        reader["ForumGroup"].ToString(),
                        (int)reader["ThreadCount"],
                        reader["LastPostBy"].ToString(),
                        (DateTime)reader["LastPostDate"],
                        reader["LastPostTitle"].ToString());
                    forums.Add(forum);
                }
                return forums;
            }
        }
    }
}

1 Ответ

8 голосов
/ 05 февраля 2012

Это недопустимый запрос ESQL.Вы не можете сделать запрос SQL в вашем управлении SQL и выполнить его как ESQL.ESQL - это другой язык запросов со своим собственным синтаксисом, который близок к SQL, но все же имеет различия, потому что он не запрашивает базу данных, а модель сущностей.Например, простой запрос в ESQL выглядит так:

SELECT VALUE Entity FROM Namespace.Entities AS Entity WHERE Entity.SomeField = 10

Видите ли вы разницу с обычным SQL?

Вместо использования ESQL и EntityCommand используйте либо SqlCommand для выполнения SQLзапрос или ObjectContext.ExecuteStoreQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...