none
Метод GetObjectByKey RRS feed

  • Вопрос

  • http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.getobjectbykey(v=vs.110).aspx   Не появляется у меня этот метод после точки, в чём может быть проблема? Всё сделано по аналогии с примером...
    25 февраля 2014 г. 18:59

Ответы

  • рекомендую начать с CodeFirst, очень просто

    1. создали класс с нужными полями которые окажутся полями в таблице

    2. создали контекст и прикрутили созданный класс

    3. запустили

    P.S. EF настолько умён что создаст базу за вас, и без строки подключения(автогенерация), вам только остаётся добавить данные и работать через linq

    • Помечено в качестве ответа nnn93 7 марта 2014 г. 6:54
    6 марта 2014 г. 17:15

Все ответы

  • Вам компилятор сказал, что метод отсутствует, или редактор? Редактор иногда ошибается, можно не обращать внимания :) А, вообще, в статье, ссылку на которую Вы привели, сказано, что такой метод есть в версии .net 3.5 sp1 или выше. А ваш проект для какой?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    25 февраля 2014 г. 20:00
  • 4.5 у меня, ну его в списке методов нету, я даже и не стал компилировать с ошибкой. Есть только GetValidationErrors и всё... Да и компилятор ошибку выдаёт 

    Error 1 'BGG.BGEntities' does not contain a definition for 'GetObjectByKey' and no extension method 'GetObjectByKey' accepting a first argument of type 'BGG.BGEntities' could be found (are you missing a using directive or an assembly reference?)

    • Изменено nnn93 26 февраля 2014 г. 10:33
    26 февраля 2014 г. 10:29
  • У класса ObjectContext вообще нет метода GetValidationErrors. Вы, может быть, не к тому типу привели свой объект?

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    26 февраля 2014 г. 12:38
  • может не тот System.Data.Entity.dll подключили, иногда их бывают несколько, из за PublicKeyToken
    26 февраля 2014 г. 13:53
  • Вы вот скинули мне ссылку и там есть метод addobject, я как то не мог найти его тоже, но оказывается вместо него есть просто add. Может я вообще не правильно что то делаю? Ну у меня есть модель edmx сущностей, создаю новую сущность и потом с ней операции провожу. Мне нужно обновить запись в базе данных, может это делается другим образом?

    Вот так добавляется без проблем :

    using System;
    using System.Collections.Generic;
    using System.Data.Entity.Core;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.Data.Objects;
    using System.Data.Entity;

    using (BGEntities BG = new BGEntities()) { { BG.Sklad.Add(new Sklad() { ProductID = 1, Number = 2 }); BG.SaveChanges(); } }



    • Изменено nnn93 26 февраля 2014 г. 17:29
    26 февраля 2014 г. 17:21
  • у меня одна только вроде в списке общем )
    26 февраля 2014 г. 17:22
  • У меня ощущение, что мы говорим на разных языках :) Какого типа это Ваше "BGEntities"? Чтобы у него появились нужные Вам методы, оно должно быть хотя бы наследником ObjectContext!


    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа Medet Tleukabiluly 27 февраля 2014 г. 3:04
    26 февраля 2014 г. 21:00
  • У меня ощущение, что мы говорим на разных языках :) Какого типа это Ваше "BGEntities"? Чтобы у него появились нужные Вам методы, оно должно быть хотя бы наследником ObjectContext!

    Оно не типа ObjectContext, я просто следую по примеру из книги троелсена, видимо там опечатка, объект Objectcontext там вообще не создаётся, только вот как у меня BGEntities, моя модель сущностей этих называется BG и вот я создал её, как в книге. Сейчас попробовал создать objectcontext, всё работает, все методы появились, но у меня новая ошибка : 
    An unhandled exception of type 'System.Data.ProviderIncompatibleException' occurred in System.Data.Entity.dll
    
    Additional information: Поставщик не возвратил экземпляр ProviderManifest.
     Возникает здесь: 
    Sklad toupd = (Sklad)BGG.GetObjectByKey(key);
     BGG - это objectcontext, когда создавал её в connectionstring написал имя как в app.config
    • Изменено nnn93 27 февраля 2014 г. 8:44
    27 февраля 2014 г. 8:43
  • в connectionString ещё допишите драйвер(провайдер), например System.Data.SqlClient для MS Sql Server или тот который нужен.
    27 февраля 2014 г. 16:41
  • в connectionString ещё допишите драйвер(провайдер), например System.Data.SqlClient для MS Sql Server или тот который нужен.
    using (ObjectContext BGG = new ObjectContext("Name=BGEntities"))
            {
             ...
            }

    да вроде было прописано 

    <connectionStrings>
        <add name="BGEntities" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=NIK;initial catalog=BG;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>

    3 марта 2014 г. 18:06
  • а вот так прописано у меня

    <add name="MovieDBContextConnectionString" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />

    как видите тут все просто, и все работает.

    тэг name использую в DbContext, тэг connectionString - сама строка подключения, где DataSource это SQL сервер, (LocalDB)v11.0 - означает MS SQL Server Express 2012, который входит в состав Visual Studio 2012, тэг AttachDbFilename - означает что у меня  есть база(если вы используете например чью то базу, в интернете куча бесплатных баз данных), или что базу нужно создать, и она портативная, и находится в той же директории что и приложение, могу легко вместе с приложением отправлять по почте например, тэг Integrated Security=True означает что используются логин пароль от windows, иногда пишут Integrated Security=SSPI, оно почти то же самое что True, тэг providerName - это драйвер.

    а здесь мы его используем

    using System;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Entity;
    
    namespace MvcMovie.Models
    {
        public class Movie
        {
            public int ID { get; set; }
    
            [StringLength(60, MinimumLength = 3)]
            public string Title { get; set; }
        }
    
        public class MovieDBContext : DbContext
        {
            public MovieDBContext() : base("MovieDBContextConnectionString")
            {}
            public DbSet<Movie> Movies { get; set; }
        }
    }


    Судя по вопросу вы новичок в EntityFramework, рекомендую начать с нуля, использовать минимум, а дальше увеличивать конфигурации. Уберите metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;MultipleActiveResultSets=True;App=EntityFramework





    4 марта 2014 г. 17:33
  • да я новичок вообще в программировании, но я по примеру делаю и я не сам прописывал connectionString, я создавал энтити модель с помощью помощника в visual studio, там спросили, добавить connectionString? я нажал галочку - добавьте. И вообще там в каждом файле созданном студией написано, что изменение его влечёт за собой неизвестные последствия, так что изменять не рекомендуется. Я поменял в app.config как вы сказали, но начала вылетать ошибка, связанная с построением этой модели... Может всё таки не в connectionString проблема? Потому что я с этой же строкой успешно добавлял информацию в базу командой add...
    5 марта 2014 г. 18:33
  • Вы используете подход ModelFirst, а я привёл способ CodeFirst, для них нужны разные сроки подключения (то есть доп конф)
    5 марта 2014 г. 19:29
  • Ладно...
    6 марта 2014 г. 15:48
  • рекомендую начать с CodeFirst, очень просто

    1. создали класс с нужными полями которые окажутся полями в таблице

    2. создали контекст и прикрутили созданный класс

    3. запустили

    P.S. EF настолько умён что создаст базу за вас, и без строки подключения(автогенерация), вам только остаётся добавить данные и работать через linq

    • Помечено в качестве ответа nnn93 7 марта 2014 г. 6:54
    6 марта 2014 г. 17:15
  • рекомендую начать с CodeFirst, очень просто

    1. создали класс с нужными полями которые окажутся полями в таблице

    2. создали контекст и прикрутили созданный класс

    3. запустили

    P.S. EF настолько умён что создаст базу за вас, и без строки подключения(автогенерация), вам только остаётся добавить данные и работать через linq

    Спасибо, я попробую
    7 марта 2014 г. 6:54