powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Доступ к элементу EF
12 сообщений из 12, страница 1 из 1
Доступ к элементу EF
    #39290346
BKV88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Как можно вытащить из базы значение и присвоить его переменной.
Модель DatabaseFirst.

Есть класс DataAccessLayer в нем есть метод, который выдергивает всю таблицу.

public List<ContactPerson> GetContactPerson(string RegCardN)
{
// Check we have an ObjectContext
using (OMP13Entities entities = new OMP13Entities())
{

// Create a query from the entityset
ObjectQuery<ContactPerson> contactperson = entities.ContactPerson;

// Create detached entities
contactperson.MergeOption = MergeOption.NoTracking;

// Define the query
var query = from c in contactperson
where (c.RegCardN == RegCardN)



select c;

// Execute the query
List<ContactPerson> results = query.ToList();

// Return the results in a List
return results;

}
}

Из консольного приложения хочу вывести определенный элемент
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 static void Main(string[] args)
        {

            DataAccessLayer dal = new DataAccessLayer();
           ContactPerson  contact = new ContactPerson();

            contact = (ContactPerson)dal.GetContactPerson("0000000003");


            Console.WriteLine(contact.ToString());
            Console.ReadKey();
          

            
        }



Вываливает exception

Cannot convert type 'System.Collections.Generic.List<DAL.ContactPerson>' to 'DAL.ContactPerson'
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290349
BKV88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BKV88,

Точнее надо вот так

Код: c#
1.
Console.WriteLine(contact.SNILS.ToString());
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290350
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BKV88,

Ничего странного не замечаете?
Код: c#
1.
contact = (ContactPerson)dal.GetContactPerson("0000000003");


Код: c#
1.
]public List<ContactPerson> GetContactPerson(string RegCardN)
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290360
BKV88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

метод GetContactPerson возвращает List<ContactPerson>
а класс ContactPerson DAL.ContactPerson
Так я вроде преобразовываю, разве нет?
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290375
BKV88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю на сколько это правильно, но все работает вот так

Код: 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.
class Program
    {
        public static string snils;
        static void Main(string[] args)
        {
          
            
            DataAccessLayer dal = new DataAccessLayer();
         ContactPerson contact = new ContactPerson();

       // contact = (ContactPerson)dal.GetContactPerson("0000000003");

         using (OMP13Entities entities = new OMP13Entities())
         {

             var query = from c in entities.ContactPerson
                         where c.RegCardN == "0000000003"
                         select c;


            

             
             
             foreach (var test in query)
             {
                 snils = test.SNILS.ToString();
             }

             }


         Console.WriteLine(snils);
         Console.ReadKey();
         }
        }
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290386
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BKV88Так я вроде преобразовываю, разве нет?
Нет, в коде выше возвращается коллекция экземпляров ContactPerson, а преобразовывается в единичный экземпляр ContactPerson.

BKV88Не знаю на сколько это правильно, но все работает вот так
Предполагается, что у каждого экземпляра ContactPerson значение RecCardN является уникальным?
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290390
BKV88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,
Да это уникальное значение.
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290393
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BKV88,
Тогда в коде выше просто имело смысл поменять код так - и все бы заработало:
Код: c#
1.
2.
3.
4.
5.
6.
7.
public ContactPerson GetContactPerson(string regCardN)
{
      using (OMP13Entities entities = new OMP13Entities())
      {
             return entities.ContactPerson.FirstOrDefault(x => x.RegCardN == regCardN);
      }
}
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290403
BKV88
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Axeleron,

Спасибо.
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39290931
B7_Ruslan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем случае, запросы linq оборачивать методами DAL - это вредительство.
Такой подход годится только для однопользовательских приложений.
Если создавать контекст для каждого вызова метода DAL - будет трудно организовать транзакции (потребуется MSDTC)
Конкретно для web-приложений надо заранее предусматривать стратегии - автоматически одна транзакция на один запрос, ручное управление транзакциями в запросе.
EF- это сам по себе интерфейс к БД, не надо над ним ничего придумывать.
Следующий этап в выделении структуры программы - предустановленные функции чтения, принимающие и возвращающие IQueryable<Название класса из модели EF> и экземпляр контекста. Таким образом появляется возможность повторно использовать функции, генерируя при этом единый запрос.
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39292002
Перегонщик перекупки
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
B7_Ruslan В общем случае , запросы linq оборачивать методами DAL - это вредительство.

я бы сказал в некоторых частных случаях , например, когда требуется несколько разных контекстов БД

B7_RuslanТакой подход годится только для однопользовательских приложений

прекрасно работает и для многопользовательских приложений

B7_RuslanЕсли создавать контекст для каждого вызова метода DAL ...

а зачем это делать? пусть все репо работают с одним контекстом
...
Рейтинг: 0 / 0
Доступ к элементу EF
    #39292196
Мойшик Трунькин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
B7_RuslanEF- это сам по себе интерфейс к БД, не надо над ним ничего придумывать

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


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