Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WinForms, .Net Framework Новый топик    Ответить
 Преобразование моего объекта к Entity  [new]
NewIvanovec
Member

Откуда: Иваново
Сообщений: 563
Есть объект Entity и такой же объект есть у меня.
Но мой не приводится к Entity.
Такое приведение возможно?
public IEnumerable<Packet> GetPackets()
        {          
            //return ent.Packets;
            return (Packet)SqlDataProvider.GetPackets();
        }


Приходится использовать свой способ получения данных из таблицы с преобразованием поля Null, а в Entity это поле является ключом и поэтому вызывается ошибка
27 ноя 18, 21:20    [21746622]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20437
либо Packet рекурсивно реализует IEnumerable<Packet>, либо пропущен yield, либо тут кто-то гонит
27 ноя 18, 21:26    [21746626]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20437
или может имелось ввиду
return SqlDataProvider.GetPackets().Cast<Packet>();
?
27 ноя 18, 21:27    [21746628]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
NewIvanovec
Member

Откуда: Иваново
Сообщений: 563
Shocker.Pro
или может имелось ввиду
return SqlDataProvider.GetPackets().Cast<Packet>();
?

Спасибо. Ошибка исчезла.

Но теперь следующий блок кода даёт ошибку, что "Не удается перечислить результаты запроса более одного раза"
 PacketsList = DataManager.GetPackets().ToList();


К сообщению приложен файл. Размер - 59Kb
27 ноя 18, 21:44    [21746639]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
fkthat
Member

Откуда:
Сообщений: 1163
NewIvanovec
Есть объект Entity и такой же объект есть у меня.



Если "такой же" это просто "с такими же свойствами", то нет. Надо или дописать .Select(x => new { .... }) или использовать, например, automapper.
27 ноя 18, 22:17    [21746664]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3408
fkthat,

что мешает использовать исходный тип, если они одинаковые? я что то не понял... :D
27 ноя 18, 23:14    [21746702]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
hVostt
Member

Откуда:
Сообщений: 15624
NewIvanovec
Спасибо. Ошибка исчезла.

Но теперь следующий блок кода даёт ошибку, что "Не удается перечислить результаты запроса более одного раза"


Написано же. Нельзя перечислять более одного раза.
Значит, когда вы в дебаге смотрите, вы тупо ломаете работу кода.
27 ноя 18, 23:32    [21746718]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Roman Mejtes
fkthat,

что мешает использовать исходный тип, если они одинаковые? я что то не понял... :D


Типичный пример - многослойка, где, к примеру два одинаковых по структуре объекта - один - сущность БД, а другой - DTO.
28 ноя 18, 06:38    [21746763]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
Roman Mejtes
fkthat,

что мешает использовать исходный тип, если они одинаковые? я что то не понял... :D


Типичный пример - многослойка, где, к примеру два одинаковых по структуре объекта - один - сущность БД, а другой - DTO.
DTO и многослойку делают как раз при разных.
А при одинаковых сущность = dto = web api = rest
?
28 ноя 18, 07:19    [21746772]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Petro123
DTO и многослойку делают как раз при разных.


Я имел в виду:

public class FooEntity {
   public int Id {get;set;}
   public string Name {get;set;}
}

public class FooDto {
   public int Id {get;set;}
   public string Name {get;set;}
}



Объекты вроде как "одинаковые", но привести один к другому просто через type casting невозможно.
28 ноя 18, 08:50    [21746825]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat,
Ок.
Тогда вариант не делать 2 класса должен работать....
28 ноя 18, 08:59    [21746830]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
NewIvanovec
Member

Откуда: Иваново
Сообщений: 563
hVostt
NewIvanovec
Спасибо. Ошибка исчезла.

Но теперь следующий блок кода даёт ошибку, что "Не удается перечислить результаты запроса более одного раза"


Написано же. Нельзя перечислять более одного раза.
Значит, когда вы в дебаге смотрите, вы тупо ломаете работу кода.


понял. спасибо.
но ещё одна появилась :)
"Недопустимая попытка вызвать Read при закрытом устройстве чтения."
28 ноя 18, 09:12    [21746840]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
NewIvanovec
Member

Откуда: Иваново
Сообщений: 563


К сообщению приложен файл. Размер - 95Kb
28 ноя 18, 09:17    [21746842]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Petro123
Тогда вариант не делать 2 класса должен работать....


Может быть куча причин делать два класса, даже если они "одинаковые". Например, навскидку:


1) Изоляция слоев - не хотим, чтобы, к примеру, слой UI напрямую работал с объектами entity, которые описаны в слое data access.


2) К объектам могут быть прицеплены разные аттрибуты - например, объекты entity могут иметь аттрибуты связанные с ORM, а объекты DTO могут иметь аттрибуты связанные с сериализацией в тот же json или там xml, и мы не хотим мешать все это в одну кучу.


3) Мы хотим заложиться на то, что может быть объекты со временем станут не совсем одинаковые - в случае разных классов изменения будут при этом проще.
28 ноя 18, 09:38    [21746855]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
fkthat
Member

Откуда:
Сообщений: 1163
NewIvanovec,

Я тут подозреваю, что сама реализация DataManager.GetPackets кривая - это типичные грабли - IEnumerable внутри него возвращается изнутри конструкции типа "using() {}" - в итоге перечисление этого IEnumerable начинается уже после того, как его источник данных закрыт.
28 ноя 18, 09:52    [21746865]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat,
Ну. На самом деле не куча, а практически 1 - делим на слои.
Тогда п. 3 просто следствие п. 1 и одинаковы временно.
А п. 2 сомнителен, т. к. атрибуты вроде прекрасно уживаются вместе. А в core вообще сериализация автоматически без всяких команд и атрибутов.
Спасибо.
28 ноя 18, 09:52    [21746866]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
NewIvanovec,

Я тут подозреваю, что сама реализация DataManager.GetPackets кривая - это типичные грабли - IEnumerable внутри него возвращается изнутри конструкции типа "using() {}" - в итоге перечисление этого IEnumerable начинается уже после того, как его источник данных закрыт.
+1
Что за менеджер?
28 ноя 18, 09:55    [21746869]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
NewIvanovec
Member

Откуда: Иваново
Сообщений: 563
public IEnumerable<UserPacket>  GetPackets()
        {
            
            using (DBDataContext db = new DBDataContext(ConnectionString))
            {
                string query = string.Format(@"SELECT *
	                                           FROM   [dbo].[Packet]
	                                                 ");

                var Val = db.ExecuteQuery<UserPacket>(query);//.ToList();
                return Val;
            }
        }
28 ноя 18, 10:07    [21746889]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
NewIvanovec
public IEnumerable<UserPacket>  GetPackets()
        {
            
            using (DBDataContext db = new DBDataContext(ConnectionString))
            {
                string query = string.Format(@"SELECT *
	                                           FROM   [dbo].[Packet]
	                                                 ");

                var Val = db.ExecuteQuery<UserPacket>(query);//.ToList();
                return Val;
            }
        }
разремуй toList
28 ноя 18, 10:15    [21746905]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
NewIvanovec,
И возьми ОРМ. Что за извращения.
Либо dataTable, dataSet.
28 ноя 18, 10:17    [21746909]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Petro123
атрибуты вроде прекрасно уживаются вместе


Уживаются-то они вместе нормально, но впендюрить, например, в объект DAL кучу аттрибутов, которые не имеют к DAL никакого отношения - решение, имхо, не очень красивое. К тому же это, может повлечь надобность цеплять в DAL зависимость от каких-то сборок, которые опять-таки имеют отношение только к тому же UI.

Petro123
А в core вообще сериализация автоматически без всяких команд и атрибутов.


Да она и до core была автоматической (в json или xml, допустим). Только что, если хотим, допустим, переименовать свойство при сериализации, или серилизовать только часть свойств или т.п.

Не, ну в многослойке, условно говоря 1 -> 2 -> 3, всегда есть соблазн не дублировать объекты слоя 3 на слое 2, но все равно в конце-концов приходим к ситуации, когда объектов слоя 3 становится недостаточно, и приходится вводить какие-то дополнительные объекты в слое 2. В итоге рождается бардак, когда в одних местах слой 1, начинает напрямую использовать исходные объекты слоя 3, а в других объекты слоя 2. По мне, так лучше с самого начала пойти на некоторый оверхед и дополнительную работу и слои строго отделить друг от друга.
28 ноя 18, 10:20    [21746911]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
fkthat
Member

Откуда:
Сообщений: 1163
Petro123,

Судя по всему у него и есть ORM, только для чего-то SQL запрос напрямую выполняется текстом, вместо LINQ.


Наличие string.Format наводит на мысль, что там пока что еще нет, но в будущем ожидается какой-нибудь sql-injection :-)


И да, ToList или ToArray там, разумеется, необходим.
28 ноя 18, 10:27    [21746921]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
Судя по всему у него и есть ORM, только для чего-то SQL запрос напрямую выполняется текстом, вместо LINQ.
ну, я как увидел select звезда from табле, так сразу и стоп кран сорвало)))
28 ноя 18, 10:33    [21746932]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
Уживаются-то они вместе нормально, но впендюрить, например, в объект DAL кучу аттрибутов, которые не имеют к DAL никакого отношения - решение, имхо, не очень красивое. К тому же это, может повлечь надобность цеплять в DAL зависимость от каких-то сборок, которые опять-таки имеют отношение только к тому же UI.
в Core DAL уже чисто условное. Это по факту POCO или обычные классы.
Все упрощают и молодцы.
Я просто за линейкой решений от простого к сложному.
Если он пишет select звезда, то рано ему делить на сборки, слои, dll'ки.
Потом поделит.
IMHO
28 ноя 18, 10:39    [21746936]     Ответить | Цитировать Сообщить модератору
 Re: Преобразование моего объекта к Entity  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 38643
fkthat
В итоге рождается бардак,
в Core автоматом инжектится контекст EF в контроллер. Конечно соблазн для студента и замаешься доказывать что так нельзя.
28 ноя 18, 10:42    [21746940]     Ответить | Цитировать Сообщить модератору
Все форумы / WinForms, .Net Framework Ответить