Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Мистика Entity Framework  [new]
skew
Member

Откуда:
Сообщений: 16
Доброго вечера, дорогие форумчане. Помогите пожалуйста решить очередные мистические вопросы программирования.
Разрабатываю проект со взаимодействием БД в нем. Создаю консольное приложение, а точнее библиотеку, но тестирую её через изменение свойств(компилировать как консольное приложение). Для соединения с БД решил использовать EF6. Пару часов мучительных работ и CodeFirst был создан вручную, но при попытке получить данные из таблицы получаю пустой массив.
Ну думаю где-то накосячил и решился воспользоваться автогенератором CodeFirst, все создалось за пару секунд, но вновь при попытке взять данные с БД получаю пустой массив. Снова подумал, может что-то с БД не так, подключаю старую базу, которая уже давно функционирует и снова при попытке получить данные получаю пустое значение. Думал, может EF кривой, запустил свой старый WPF проект, который работал со второй БД о которой писал выше и получил нужные мне данные без каких-то проблем. Вновь мысль, может пока писал код консольного приложения где-то что-то запорол, создаю абсолютно чистое консольное приложение, добавляю Nuget пакет EF 6.2.0 и пробую обратиться к той БД с которой на WPF получилось вернуть данные, но надежда умирает последней, что и случилось - вновь возвращается пустое значение.
Объясните пожалуйста, что может быть не так? Спасибо
22 апр 18, 22:25    [21359121]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19138
вы сами-то как считаете, этой информации достаточно, чтобы оказать вам какую-либо помощь?
22 апр 18, 23:07    [21359208]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

Откуда:
Сообщений: 16
Shocker.Pro,
Сейчас попробую подробней написать.
И немного не по теме, не подскажете, есть ли возможность задать вторичный ключ в EF6 (не Core) через OnModelCreating ?
23 апр 18, 00:27    [21359318]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

Откуда:
Сообщений: 16
для связи 1 к 1
23 апр 18, 00:28    [21359321]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
hVostt
Member

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

https://metanit.com/sharp/entityframework/
23 апр 18, 06:12    [21359421]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 34725
skew
для связи 1 к 1
один к одному таблы и так не делают, а тут еще и с вторичным? Это как? Дайте dml.
23 апр 18, 07:18    [21359455]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

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

Картинка с другого сайта.
+ Скрипт создания таблиц БД

CREATE TABLE [dbo].[Instagrams](
	[Id] [bigint] NOT NULL,
	[Uri] [varchar](50) NOT NULL,
	[DateOfRegistration] [datetime] NOT NULL,
 CONSTRAINT [PK_Instagrams_1] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[ListOfBlocks](
	[InstagramId] [bigint] NOT NULL,
	[ExpirationDate] [datetime] NOT NULL
) ON [PRIMARY]
ALTER TABLE [dbo].[ListOfBlocks]  WITH CHECK ADD  CONSTRAINT [FK_ListOfBlocks_Instagrams] FOREIGN KEY([InstagramId]) REFERENCES [dbo].[Instagrams] ([Id])
ALTER TABLE [dbo].[ListOfBlocks] CHECK CONSTRAINT [FK_ListOfBlocks_Instagrams]



+ Автосгенерированный класс ListOfBlock

public partial class Instagrams
    {
        public class ListOfBlocksModel
    {              
        public long InstagramId { get; set; }
        public DateTime ExpirationDate { get; set; }
        public virtual InstagramModel Instagram { get; set; }
    }



+ Автосгенерированный класс Instagam

  public class InstagramModel
    {        
        public long Id { get; private set; }
        public string Uri { get; set; }
        public DateTime DateOfRegistration { get; set; }
    }



Модератор: Учимся использовать тэги оформления кода - FAQ


Вот получается при вызове ListOfBlock подгружается таблица, а к ней сразу указатель на нужного пользователя, который связан
23 апр 18, 13:49    [21360742]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 34725
skew,
И где тут 1 к 1?
Один ко многим. Во вторую таблу добавить поле id.
Для одного uri insagram можно занести 3 записи во вторую таблу.
Попробуй.
23 апр 18, 14:14    [21360884]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 19138
skew
CodeFirst был создан вручную, но при попытке получить данные из таблицы получаю пустой массив.
а вот этот код где?
может просто virtual забыл написать?
23 апр 18, 14:15    [21360889]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

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

Извиняюсь, не совсем понял, можете пояснить?
Почему Один ко многим идет? Ведь в таблице Instagram может находиться только 1 строка с уникальным Id. Далее в таблице ListOfBlock так же этот уникальный Id должен присутствовать лишь единожды. Сейчас чтобы все заработало я сделал так, но хочется вынести все в OnModelCreaiting
 public class ListOfBlocksModel
    {  
        [ForeignKey("Instagram")]
        public long InstagramId { get; set; }
        public DateTime ExpirationDate { get; set; }
        public virtual InstagramModel Instagram { get; set; }
    }
26 апр 18, 17:26    [21371634]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 34725
skew,
При написании поста нажми кн. Table и оформи 2 таблички типо так:
Код Имя Возраст
33 Иван 22
34 Иван 21

Тогда смогу ответить на твой вопрос.
26 апр 18, 17:52    [21371718]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

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

Instagram:
Id Uri DateOfRegistrationn
1skew 26.04.2018
2Petro123 25.04.2018


ListOfBlock
InstagramId ExpirationDate
1 28.04.2018


Итого пользователь с Id = 1 будет в блокировке до 28.04.2018 согласно второй таблице.
Но поскольку просто брать из таблицы список Id и перебором искать в списке пользователей не есть гуманное решение, то в класс ListOfBlock так же добавлена ссылка на генерируемый класс Instagram, который должен брать соответствующий Id и загружать по нему данные с базы
26 апр 18, 18:57    [21371860]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 34725
skew,
Другое дело.
1. В каждой табле должен быть PK.
Делай.
26 апр 18, 19:19    [21371913]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

Откуда:
Сообщений: 16
Petro123,
а после?
26 апр 18, 19:25    [21371921]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 34725
skew
Petro123,
а после?
там сам увидишь что если один к одному то объединить в одну таблу.
Если один ко многим, то ....
Ты делай.
26 апр 18, 19:40    [21371955]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

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

Так в том и проблема, что netframework не имеет связи один к одному (HasOne) (ну или я не нашел). В .netCore есть такое
26 апр 18, 19:51    [21371968]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Petro123
Member

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

Так в том и проблема, что netframework не имеет связи один к одному (HasOne) (ну или я не нашел). В .netCore есть такое

Одну таблу делай. 10 раз сказать?
26 апр 18, 19:55    [21371973]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

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

а в нее положить List<ListOfBlock> ?
Тогда будет связь один ко многим, но чтобы найти кто в блокировке нужно будет всех пользователей перебрать
26 апр 18, 20:01    [21371983]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
big-duke
Member

Откуда:
Сообщений: 6644
skew,&
что мешает перенести ExpirationDate в таблицу instagram ?
26 апр 18, 20:16    [21372004]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
Petro123
Member

Откуда: Загрузочный сектор Москвы (AutoPOI.ru)
Сообщений: 34725
big-duke
skew,&
что мешает перенести ExpirationDate в таблицу instagram ?
я об этом и говорю, только как об стену.
26 апр 18, 20:18    [21372005]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

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

Ну добавлю я еще пару полей в таблицу ListOfBlock, это ж сколько дублей данных нужно хранить, который никак зачастую могут не использоваться. И снова к моменту трудозатрат, будет в таблице instagram 1кк пользователей, два человека в блокировке. Это чтобы мне их найти нужно весь список перебрать, только зачем так усложнять?
26 апр 18, 22:35    [21372195]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
big-duke
Member

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

Дублей у вас не будет, так как 1:1.
Данные у вас же не текстовом файле хранятся, значит СУБД, которая и осуществит выборку данных.
26 апр 18, 22:46    [21372213]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

Откуда:
Сообщений: 16
big-duke,

ну предположим поле помечено как NULL и допускает пустое значение, но вторая проблема остается актуальной, чтобы найти тех пользователей у который поле не равно null, то это обработка всего массива пользователей, что алгоритмически даст скорость выполнения O(n), против константного времени О(1) - это при условии, что список заблокированных вынесен в отдельную таблицу
26 апр 18, 23:14    [21372285]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
big-duke
Member

Откуда:
Сообщений: 6644
skew,
во-первых, в СУБД есть индексы.
Во-вторых, некоторые СУБД, например MSSQL, умеют индексировать поле с NULL, что в плане запроса даст Index Seek, а не Table Scan.

У вас есть какой-то лимит по времени запроса или тесты, доказывающие, что если хранить данные раздельно, то будет драматический рост времени выполнения запроса ?

Можно, например, раз в сутки или другой интервал делать выгрузку заблокированных пользователей в отдельную таблицу.
И потом запросы делать к ней, а не к исходной таблице.
26 апр 18, 23:48    [21372354]     Ответить | Цитировать Сообщить модератору
 Re: Мистика Entity Framework  [new]
skew
Member

Откуда:
Сообщений: 16
big-duke,

Мы сейчас уже начинаем уходить в сторону возможностей SQL, оптимизации и алгоритмизации. А я всего-то хотел узнать как в OnModelCreating установить ForeignKey для второй таблицы. Сейчас я устанавливаю его при помощи атрибута, да, все работает, но просто красота кода теряется, вот и задался вопросом
27 апр 18, 00:58    [21372455]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить