Задать вопрос
Ответы пользователя по тегу Базы данных
  • Какой способ подключения к БД на C# правильный?

    @kttotto
    пофиг на чем писать
    Все, что выполняет поставленную задачу - правильно. Все, что позволяет потом поддерживать и масштабировать код - еще правильней.

    В бизнес проектах через конструктор никто, конечно, код для бд не пишет. Чаще всего для мапинга с бд используют какую-нибудь ORM (EF, Dapper), руками пишут модели, которые потом будут мапиться на таблицы бд, прописывают их связи.
    Ответ написан
    3 комментария
  • Практики регулирования доступа к кэшированным (редко изменяемым) данным в условиях многопоточности?

    @kttotto
    пофиг на чем писать
    Если данные в кеше недействительны, то кэш сбрасывается и перечитывается по новой. Чтобы весь глобально не сбрасывать, его делят на слои и сбрасывают необходимый слой. Чтобы отдельно объект в кэше обновлять, такого не встречал.

    Если слои кэша в Concurrent списках, то без разницы, кто его в этот момент читает. Мы для кэша используем Lazy.

    Я так понимаю, что данные хоть и будут изменяться, то не часто, иначе нет смысла в кэше. В нашем случае, когда приходят новые данные или мы их обновляем, мы руками вызываем _cache.Layer.Reset()
    Ответ написан
    1 комментарий
  • Как использовать ASP.NET Identity в CMS?

    @kttotto
    пофиг на чем писать
    В EF core нет model first, только code first и database first, хотя может за последний год что-то и поменялось. Identity настраивается по своему вкусу, все достаточно гибко. Последние годы использовал только кодфёст, собственно это рекомендуемый способ. Бд обновляются миграциями, туториалов в сети полно как, можно самому код написать, можно сгенерировать на основе разницы бд.
    Ответ написан
    Комментировать
  • Бест практикс для геосервиса?

    @kttotto
    пофиг на чем писать
    Делал такое дело, правда на .net. На серверной части проблем особых нет, кроме самой веб части, была служба, которая слушала трекеры, писала сообщения в бд и по вебсокетам слала сообщение клиенту на страницу. В бд, кроме стандартной части под юзеров, было пару таблиц: под трекеры и их сообщения. Трекеры соответственно привязывались к пользователям.
    Основная замарочка в веб части, сделать это интерактивно, с нормально понятным интерфейсом и достаточными возможностями для пользователя, чтобы не только маркеры на карте видеть. Возможность задать полигон, сигналить о входе/выходе за пределы полигона или приближению к ключевым точкам, удобно хранить историю и поиск по ней, или красиво нарисовать траекторию. Ну и куча всякой другой дребедени.
    Ответ написан
    Комментировать
  • Как решить проблему типов при отношении многие ко многим?

    @kttotto
    пофиг на чем писать
    Все зависит от того как Вы этот value собираетесь использовать.

    Если не нужно будет по нему делать поиск, индексировать, то можно сделать MAX, и в нем же хранить тип значения, что-то вроде {"$type":"int","value":3}

    Если по нему все же надо будет делать выборку, то я бы, наверное, сделал таблицу value с полями для всех возможно нужных типов и в options сделал два поля type и valueId ну и тогда я буду знать строку и колонку, где читать значение в таблице value.
    Ответ написан
  • Несколько элементов в ячейке БД ASP.NET?

    @kttotto
    пофиг на чем писать
    Трудно понять, что именно Вы хотите. Вы лучше саму задачу расскажите.

    В какой таблице надо сделать ссылку на пользователя? UserID это и есть ссылка, зачем ее заменять?
    Что значит сделать несколько юзеров в одной ячейке? Наверное Вы имеете ввиду связь один-ко многим или многие-ко многим? Непонятно какую таблицу с какой и какой связью связать хотите.

    Вы показываете БД, а Вы же наверное через EF делаете, покажите модели. Или Вам надо показать модели в коде как будут выглядеть? В общем ничего не понятно)

    Продолжение:
    Из комментариев я так понял, что Вы хотите знать как будут выглядеть модели в коде для EF. И еще раз посмотрев на Ваши таблицы, я понял, что Вы их не совсем верно составили.

    В таблице User поле Balance, по всей видимости должен был указывать на таблицу Balance. В таком случае его надо было назвать BalanceId. Но опять таки, только для случаев, если у пользователя может быть только один баланс. Тогда в таблице Balance было не обязательно указывать на пользователя UserId.

    Я примерно накидал как это будет в C#
    public class User
    	{
    		public int Id { get; set; }
    		public string Login { get; set; }
    		public string Password { get; set; }
    		public string FirstName { get; set; }
    		public string LastName { get; set; }
    
    		public virtual IEnumerable<Event> Events { get; set; } 
    		public virtual IEnumerable<Balance> Balances { get; set; }
    
    		public User()
    		{
    			Events = new List<Event>();
    			Balances = new List<Balance>();
    		}
    	}
    
    	public class Event
    	{
    		public int Id { get; set; }
    		public string Name { get; set; }
    		public DateTime EndTime { get; set; }
    
    		public virtual IEnumerable<User> Users { get; set; }
    
    		public Event()
    		{
    			Users = new List<User>();
    		}
    	}
    
    	public class Balance
    	{
    		public int Id { get; set; }
    		public decimal Amount { get; set; }
    
    		public int UserId { get; set; }
    		public virtual User User { get; set; }
    	}

    Обратите внимание, что пользователи связаны с балансом как один-ко многим: один пользователь может иметь много счетов, но счет может иметь только одного пользователя. А события с пользователями связаны как многие-ко многим, т.е. один пользователь может быть прикреплен ко многим событиям и в одном событии может участвовать много пользователей. Для такой связи EF создаст дополнительную таблицу.

    Вообще, мой совет, не кидайтесь сразу в код, почитайте базу по БД и EF или вот хотя бы от сюда
    Ответ написан
  • Linq.Dynamic и DataTable?

    @kttotto
    пофиг на чем писать
    На стадии формирования запроса у Вас не существует объекта T2. Есть разница меду Enumerable и Queryable. Тип Enumerable - LINQ будет выполнять как конвеер, по цепочке выполняя каждое следующее расширение. А Queryable он возьмет все цепочки сразу и будет пытаться сформировать один SQL запрос. Поэтому мне не совсем понятно Ваше преобразование .AsEnumerable().AsQueryable() потому, что я так понимаю, что DT изначально возвращает Queryable.

    Вообщем, сделайте вот это "new (@0 as T2) " где то раньше Вашего join.
    Ответ написан
    Комментировать