Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340

Entity Framework + несколько БД

02.12.2019, 14:12. Показов 1941. Ответов 11

Студворк — интернет-сервис помощи студентам
Есть два класса:
  1. Класс Teg

    C#
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    public class Teg
        {
            public int Id { get; set; }
            public string NameTeg { get; set; }
            public ICollection<Item> Item { get; set; }
            public Teg()
            {
                Item = new List<Item>();
            }
        }
  2. Класс Item

    C#
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    public class Item
        {
            public int Id { get; set; }
            public string NameItem { get; set; }
            public string Code1 { get; set; }
            public string Code2 { get; set; }
            public int? TegId { get; set; }
            public Teg Teg { get; set; }
     
        }

Хочу подгружать данные из БД, в которой будет две таблицы, соответствующие классам. Отношение таблиц один ко многим.
Использую entity framework.
Как создав данные в программе, сохранить их в файл БД?
И как в программе подгрузить данные из выбранной (из диалогового окна) БД и подгрузить данные?

В настоящий момент использую подход Code first, но в этом подходе создается одна БД и сохраняется на локальном сервере. Мне же нужно, чтобы можно было сохраняться данные все время в разные файлы-БД, и была возможность выбрать одну из нескольких уже сохраненных БД и открыть ее.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2019, 14:12
Ответы с готовыми решениями:

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

Entity Framework

11
Эксперт .NET
 Аватар для Usaga
14306 / 9387 / 1355
Регистрация: 21.01.2016
Сообщений: 35,404
02.12.2019, 15:40
Semyon001, подходу Code First до фонаря где и как у вас СУБД расположена. "Локальная база" - это ставящийся вместе со студией SQL Server LocalDB? Так вы вольны выбирать СУБД.

Цитата Сообщение от Semyon001 Посмотреть сообщение
Мне же нужно, чтобы можно было сохраняться данные все время в разные файлы-БД
Что ещё за файлы-БД?

Цитата Сообщение от Semyon001 Посмотреть сообщение
Класс Teg
Вообще-то, правильно пишется TAG
0
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340
02.12.2019, 16:00  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
"Локальная база" - это ставящийся вместе со студией SQL Server LocalDB?
Да, подключаюсь к ней так: (LocalDb)\MSSQLLocalDB.

Цитата Сообщение от Usaga Посмотреть сообщение
Что ещё за файлы-БД?
Это файл, с помощью которого, я смогу подгрузить данные из определенной БД. Возможно в этом файле будет прописан путь к БД, какую именно нужно открыть. Например, есть две БД (они одинаковые, но наполнены различными данными):
- БД1
- БД2
Есть соответственно 2 файла:
- bd1.txt
- bd2.txt
В которых хранится информация о подключении к БД1 или БД2.
В своей программе я хочу выбрать файл, из которого я узнаю инфу о подключении к нужной БД. И соответственно выполню это подключение и прочитаю оттуда все данные.
Также в своей программе я хочу уметь создавать БД3 и файл bd3.txt.
Это был первый подход, который приходит на ум.

Второй подход, который тоже возможно имеет место быть, это когда вся информация хранится в одной БД. Но файлы
- bd1.txt
- bd2.txt
остаются и содержат некоторый ProjectID по которому из всей БД можно выделить именно те teg, которые относятся к сохраненному проекту. И тогда класс TEG немного изменится:
C#
1
2
3
4
5
6
7
8
9
10
11
public class Teg
    {
        public int ProjectID {get; set; }
        public int Id { get; set; }
        public string NameTeg { get; set; }
        public ICollection<Item> Item { get; set; }
        public Teg()
        {
            Item = new List<Item>();
        }
    }
Какой из этих подходов будет более правильным?

Цитата Сообщение от Usaga Посмотреть сообщение
Вообще-то, правильно пишется TAG
Это не тот TAG, который вы имеете ввиду, здесь именно teg - некая сущность в моем приложении. И каждый teg может содержать несколько item.
0
Эксперт .NET
 Аватар для Usaga
14306 / 9387 / 1355
Регистрация: 21.01.2016
Сообщений: 35,404
02.12.2019, 16:07
Цитата Сообщение от Semyon001 Посмотреть сообщение
Второй подход, который тоже возможно имеет место быть, это когда вся информация хранится в одной БД. Но файлы
- bd1.txt
- bd2.txt
остаются и содержат некоторый ProjectID по которому из всей БД можно выделить именно те teg, которые относятся к сохраненному проекту. И тогда класс TEG немного изменится:
Так это куда более правильный подход, нежели плодить базы данных с идентичной структурой.
1
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340
03.12.2019, 10:12  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Так это куда более правильный подход, нежели плодить базы данных с идентичной структурой.
Действительно так лучше.

Тогда как разместить базу данных у меня в проекте? Сейчас она находится на локальном сервере. Сейчас, чтобы к ней подключиться, я пишу (LocalDb)\MSSQLLocalDB.

В App.config есть такая строка:
XML
1
2
3
<connectionStrings>
    <add name="MyModel" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=MyModelDB;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>
Что нужно изменить, чтобы БД сохранялась в папке с проектом?
0
Эксперт .NET
 Аватар для Usaga
14306 / 9387 / 1355
Регистрация: 21.01.2016
Сообщений: 35,404
03.12.2019, 10:42
Semyon001, LocalDB и так позволяет вам базу сохранять где угодно. Другое дело, что чтобы с такой базой работать на машине должен быть установлен SQL Server в редакции LocalDB.

Вам что именно нужно? Чтобы файл базы где-то под рукой валялся в проекте (зачем? какой смысл?) или чтобы с файлом можно было работать без установки в систему сторонних штуковин?
0
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340
03.12.2019, 10:50  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
чтобы с файлом можно было работать без установки в систему сторонних штуковин
Вот этот вариант.


Так как если я захочу запустить проект на другом компе, перекинув программу, БД должна перенестись вместе с программой. То есть она должна лежать в папке с проектом.
Также не факт, что на другом компе будут стоять сторонние штуковины, и их кто-то будет ставить...
0
Эксперт .NET
 Аватар для Usaga
14306 / 9387 / 1355
Регистрация: 21.01.2016
Сообщений: 35,404
03.12.2019, 10:52
Цитата Сообщение от Semyon001 Посмотреть сообщение
Так как если я захочу запустить проект на другом компе, перекинув программу
... то СУБД должна быть доступна по сети. Или, если не предвидится многопользовательского доступа к базе, то можно использовать встраиваемые СУБД: SQLite, Firebird Embedded, LightDB.
1
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340
03.12.2019, 10:59  [ТС]
Usaga, что тогда нужно изменить в моем проекте, чтобы использовать SQLite (как-то уже работал с этой СУБД, но не вместе с Entity Framework)?
0
Эксперт .NET
 Аватар для Usaga
14306 / 9387 / 1355
Регистрация: 21.01.2016
Сообщений: 35,404
03.12.2019, 11:21
Semyon001, Нужно установить ряд NuGet-пакетов: SQLite, провайдер ADO.NET для SQLite и провайдер EF6 для SQLite.
0
5 / 5 / 0
Регистрация: 12.08.2015
Сообщений: 340
03.12.2019, 13:28  [ТС]
Usaga, но ведь при использовании SQLite я не смогу воспользоваться подходом Code First, который есть в EF6 и который создает БД сам. Получается БД нужно вручную создавать?
0
Эксперт .NET
 Аватар для Usaga
14306 / 9387 / 1355
Регистрация: 21.01.2016
Сообщений: 35,404
03.12.2019, 17:32
Semyon001, Code First не про создание базы по коду. Это - про создания модели в виде чистого кода. Такую модель можно как описать руками, так и сгенерировать по базе. А базу вам создавал инициализатор. Но такой инициализатор SQLite действительно не поддерживает.

Не вижу в этом ничего страшного. Создадите базу руками. В конце концов, далеко не все пользуются EF'ом и ничего - работают.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2019, 17:32
Помогаю со студенческими работами здесь

Entity framework One vs Zero-or-One
При настройке ассоциаций между двумя сущностями можно выбрать чтобы на конце связь была &quot;один&quot; и &quot;ноль или один&quot;-не...

Entity Framework 6
Нарисовалась неожиданная проблемка. Штудирую Троелсена, там описание Framework 4, у меня 6-я версия. Один из примеров пришлось...

Распространение ПО с Entity Framework 6
Здравствуйте. Есть проект (c Entity Framewok 6, code first, LocalDB). Если запустить приложение на другом компьютере, то вылазит ошибка. ...

Добавление в БД Entity Framework 6
Не добавляет в бд записи, но выводит в консоли единожды после перезапуска приложения вывод прежний public partial class...

Entity Framework. Связь 1 к 1
Привет всем Имею два класса: public class EntityA { public Guid Id { get; set; } } public class EntityB {


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru