Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Мистика Entity Framework / 25 сообщений из 28, страница 1 из 2
22.04.2018, 22:25
    #39634412
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Доброго вечера, дорогие форумчане. Помогите пожалуйста решить очередные мистические вопросы программирования.
Разрабатываю проект со взаимодействием БД в нем. Создаю консольное приложение, а точнее библиотеку, но тестирую её через изменение свойств(компилировать как консольное приложение). Для соединения с БД решил использовать EF6. Пару часов мучительных работ и CodeFirst был создан вручную, но при попытке получить данные из таблицы получаю пустой массив.
Ну думаю где-то накосячил и решился воспользоваться автогенератором CodeFirst, все создалось за пару секунд, но вновь при попытке взять данные с БД получаю пустой массив. Снова подумал, может что-то с БД не так, подключаю старую базу, которая уже давно функционирует и снова при попытке получить данные получаю пустое значение. Думал, может EF кривой, запустил свой старый WPF проект, который работал со второй БД о которой писал выше и получил нужные мне данные без каких-то проблем. Вновь мысль, может пока писал код консольного приложения где-то что-то запорол, создаю абсолютно чистое консольное приложение, добавляю Nuget пакет EF 6.2.0 и пробую обратиться к той БД с которой на WPF получилось вернуть данные, но надежда умирает последней, что и случилось - вновь возвращается пустое значение.
Объясните пожалуйста, что может быть не так? Спасибо
...
Рейтинг: 0 / 0
22.04.2018, 23:07
    #39634428
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
вы сами-то как считаете, этой информации достаточно, чтобы оказать вам какую-либо помощь?
...
Рейтинг: 0 / 0
23.04.2018, 00:27
    #39634440
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Shocker.Pro,
Сейчас попробую подробней написать.
И немного не по теме, не подскажете, есть ли возможность задать вторичный ключ в EF6 (не Core) через OnModelCreating ?
...
Рейтинг: 0 / 0
23.04.2018, 00:28
    #39634441
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
для связи 1 к 1
...
Рейтинг: 0 / 0
23.04.2018, 06:12
    #39634463
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
...
Рейтинг: 0 / 0
23.04.2018, 07:18
    #39634468
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skewдля связи 1 к 1один к одному таблы и так не делают, а тут еще и с вторичным? Это как? Дайте dml.
...
Рейтинг: 0 / 0
23.04.2018, 13:49
    #39634748
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Petro123,


Скрипт создания таблиц БД
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public partial class Instagrams
    {
        public class ListOfBlocksModel
    {              
        public long InstagramId { get; set; }
        public DateTime ExpirationDate { get; set; }
        public virtual InstagramModel Instagram { get; set; }
    }




Автосгенерированный класс Instagam
Код: c#
1.
2.
3.
4.
5.
6.
  public class InstagramModel
    {        
        public long Id { get; private set; }
        public string Uri { get; set; }
        public DateTime DateOfRegistration { get; set; }
    }




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

Вот получается при вызове ListOfBlock подгружается таблица, а к ней сразу указатель на нужного пользователя, который связан
...
Рейтинг: 0 / 0
23.04.2018, 14:14
    #39634778
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skew,
И где тут 1 к 1?
Один ко многим. Во вторую таблу добавить поле id.
Для одного uri insagram можно занести 3 записи во вторую таблу.
Попробуй.
...
Рейтинг: 0 / 0
23.04.2018, 14:15
    #39634779
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skewCodeFirst был создан вручную, но при попытке получить данные из таблицы получаю пустой массив.а вот этот код где?
может просто virtual забыл написать?
...
Рейтинг: 0 / 0
26.04.2018, 17:26
    #39636904
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Petro123,

Извиняюсь, не совсем понял, можете пояснить?
Почему Один ко многим идет? Ведь в таблице Instagram может находиться только 1 строка с уникальным Id. Далее в таблице ListOfBlock так же этот уникальный Id должен присутствовать лишь единожды. Сейчас чтобы все заработало я сделал так, но хочется вынести все в OnModelCreaiting
Код: c#
1.
2.
3.
4.
5.
6.
7.
 public class ListOfBlocksModel
    {  
        [ForeignKey("Instagram")]
        public long InstagramId { get; set; }
        public DateTime ExpirationDate { get; set; }
        public virtual InstagramModel Instagram { get; set; }
    }
...
Рейтинг: 0 / 0
26.04.2018, 17:52
    #39636930
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skew,
При написании поста нажми кн. Table и оформи 2 таблички типо так:
Код Имя Возраст33 Иван 2234 Иван 21
Тогда смогу ответить на твой вопрос.
...
Рейтинг: 0 / 0
26.04.2018, 18:57
    #39636975
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Petro123,

Instagram:
Id Uri DateOfRegistrationn1skew 26.04.20182Petro123 25.04.2018

ListOfBlock
InstagramId ExpirationDate1 28.04.2018

Итого пользователь с Id = 1 будет в блокировке до 28.04.2018 согласно второй таблице.
Но поскольку просто брать из таблицы список Id и перебором искать в списке пользователей не есть гуманное решение, то в класс ListOfBlock так же добавлена ссылка на генерируемый класс Instagram, который должен брать соответствующий Id и загружать по нему данные с базы
...
Рейтинг: 0 / 0
26.04.2018, 19:19
    #39636994
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skew,
Другое дело.
1. В каждой табле должен быть PK.
Делай.
...
Рейтинг: 0 / 0
26.04.2018, 19:25
    #39636997
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Petro123,
а после?
...
Рейтинг: 0 / 0
26.04.2018, 19:40
    #39637001
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skewPetro123,
а после?там сам увидишь что если один к одному то объединить в одну таблу.
Если один ко многим, то ....
Ты делай.
...
Рейтинг: 0 / 0
26.04.2018, 19:51
    #39637003
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Petro123,

Так в том и проблема, что netframework не имеет связи один к одному (HasOne) (ну или я не нашел). В .netCore есть такое
...
Рейтинг: 0 / 0
26.04.2018, 19:55
    #39637005
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skewPetro123,

Так в том и проблема, что netframework не имеет связи один к одному (HasOne) (ну или я не нашел). В .netCore есть такое
Одну таблу делай. 10 раз сказать?
...
Рейтинг: 0 / 0
26.04.2018, 20:01
    #39637009
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Petro123,

а в нее положить List<ListOfBlock> ?
Тогда будет связь один ко многим, но чтобы найти кто в блокировке нужно будет всех пользователей перебрать
...
Рейтинг: 0 / 0
26.04.2018, 20:16
    #39637012
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skew,&
что мешает перенести ExpirationDate в таблицу instagram ?
...
Рейтинг: 0 / 0
26.04.2018, 20:18
    #39637013
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
big-dukeskew,&
что мешает перенести ExpirationDate в таблицу instagram ?я об этом и говорю, только как об стену.
...
Рейтинг: 0 / 0
26.04.2018, 22:35
    #39637047
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
Petro123,

Ну добавлю я еще пару полей в таблицу ListOfBlock, это ж сколько дублей данных нужно хранить, который никак зачастую могут не использоваться. И снова к моменту трудозатрат, будет в таблице instagram 1кк пользователей, два человека в блокировке. Это чтобы мне их найти нужно весь список перебрать, только зачем так усложнять?
...
Рейтинг: 0 / 0
26.04.2018, 22:46
    #39637048
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skew,

Дублей у вас не будет, так как 1:1.
Данные у вас же не текстовом файле хранятся, значит СУБД, которая и осуществит выборку данных.
...
Рейтинг: 0 / 0
26.04.2018, 23:14
    #39637053
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
big-duke,

ну предположим поле помечено как NULL и допускает пустое значение, но вторая проблема остается актуальной, чтобы найти тех пользователей у который поле не равно null, то это обработка всего массива пользователей, что алгоритмически даст скорость выполнения O(n), против константного времени О(1) - это при условии, что список заблокированных вынесен в отдельную таблицу
...
Рейтинг: 0 / 0
26.04.2018, 23:48
    #39637058
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
skew,
во-первых, в СУБД есть индексы.
Во-вторых, некоторые СУБД, например MSSQL, умеют индексировать поле с NULL, что в плане запроса даст Index Seek, а не Table Scan.

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

Можно, например, раз в сутки или другой интервал делать выгрузку заблокированных пользователей в отдельную таблицу.
И потом запросы делать к ней, а не к исходной таблице.
...
Рейтинг: 0 / 0
27.04.2018, 00:58
    #39637070
skew
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Мистика Entity Framework
big-duke,

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


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