2013-12-24 2 views
1

Я следую этому руководству, и я понятия не имею, как использовать Entity SQL: или собственный SQL. Может кто-нибудь помочь?Возникли проблемы с сущностью, чтобы делать sql-запросы

http://www.entityframeworktutorial.net/Querying-with-EDM.aspx

Когда я пытаюсь запустить код при условии, после изменения текста LightBlue к чему-то соответствие мой проект, я получаю:

Ошибка 1 «foo.PMEntities» не содержит определение для «ExecuteStoreCommand» и без расширения> метод «ExecuteStoreCommand» принимать первый аргумент «foo.PMEntities» типа может быть найдено (вы> отсутствует с помощью директивы или ссылка на сборку?)

ExecuteStoreQuery и CreateQuery также имеют такую ​​же проблему.

Я посмотрел на свои ссылки, и я думаю, что все должно быть хорошо.

a busy cat http://img707.imageshack.us/img707/8615/8nz8.png

Я могу запросить с помощью LINQ к лицам просто отлично, но я не очень привык к Linq.

Пример код: `общественного ActionResult CharlieTest() { использования (VAR = objCtx новых PMEntities()) { вар schoolCourse = от CS в objCtx.Courses , где cs.CourseName == "Course1" выберите cs; // «Кур» коррелирует с курсом Cours mathCourse = schoolCourse.FirstOrDefault(); IList courseList = schoolCourse.ToList();

  string courseName = mathCourse.CourseName; 
     } 

     //Querying with Object Services and Entity SQL 
     //Entity SQL does not recognize certain statements like createQuery and I can't add a reference to something that will help 
     //using (var objCtx = new PMEntities()) 
     //{ 
     // string sqlString = "SELECT VALUE cs FROM SchoolDBEntities.Courses AS cs WHERE cs.CourseName == 'Maths'"; 
     // ObjectQuery<Cours> course = objCtx. 
     //  <Cours>(sqlString); 
     // Cours coursename1 = course.FirstOrDefault<Cours>(); 
     //} 


     //nativeSQL also doesn't work. Can not find ExecuteStoreCommand or ExecuteStoreQuery 
     using (var objCtx = new PMEntities()) 
     { 
      //Inserting Student using ExecuteStoreCommand 
      int InsertedRows = objCtx.Database.SqlQuery("Insert into Student(StudentName,StandardId) values('StudentName1',1)").ToArray(); 

      //Fetching student using ExecuteStoreQuery 
      var student = objCtx.Database.SqlQuery<Cours>("Select * from Student where StudentName = 'StudentName1'", null).ToList(); 

     } 

     return View(); 
    }` 

С Рождеством!

+0

Вы пробовали 'ctx.Database.SqlQuery ()' это делает почти то же самое, как ExecuteStoreCommand – Armand

+0

я пробовал, но я не был уверен, что разница была и хотела точно следовать учебнику. Есть ли сопоставимый метод для ExecuteStoreQuery? Я смотрю здесь, и я не вижу. http://msdn.microsoft.com/en-us/library/system.data.entity.database.sqlquery(v=vs.113).aspx – obesechicken13

+0

Спасибо Арманд. Это сделал трюк! Если кому-то нужен образец кода для работы, все, что мне нужно было сделать, это изменить код на «var student = objCtx.Database.SqlQuery (« SELECT * FROM [PM]. [Dbo]. [Users], где Users.UserName = 'uguanch' "). ToList();' По-прежнему нужно выяснить, как читать содержимое. – obesechicken13

ответ

1

Вам нужно вызвать метод ExecuteSqlCommand (запрос) для контекста дб "Foo" (не для "foo.Pmentitis")

Пример:

using (CompaniesEntities _c = new CompaniesEntities(
       extra.GetCompaniesConnectionString(
        db_name 
       ) 
      )) 
     { 

      _c.Database.ExecuteSqlCommand(@" 
      if not exists (select * from sysobjects where name='agency_templates' and xtype='U') 
       CREATE TABLE [dbo].[agency_templates](
        [ag_templ_id] [int] IDENTITY(1,1) NOT NULL, 
        ... 
      ", new object[] { }); 
    } 
+0

Я делаю это, хотя. – obesechicken13

0

Возможно, вы можете использовать Entity Framework 4 , где для стратегии генерации кода установлено значение «По умолчанию», что приводит к созданию объекта ObjectContext. Entity Framework 5 на VS2012 по умолчанию создает DbContext для модели данных. How to upgrade EF.

Также вы можете сделать это:

int InsertedRows = (objCtx as IObjectContextAdapter).ObjectContext.ExecuteStoreCommand("Insert into students(StudentName,StandardId) values('StudentName1',1)", new object[] { }); 
+0

Нет. Я был на EF 5, и я только что обновился до 6. Это не помогло, но спасибо. – obesechicken13

+0

Как насчет этого? http://msdn.microsoft.com/en-us/data/jj556581 –

Смежные вопросы