Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
1

Использование Entity Framework совместно с SQLite

25.04.2016, 07:48. Просмотров 2909. Ответов 13
Метки нет (Все метки)

Подскажите пожалуйста как совместить их? Только при создании БД из графического интерфейса (через диаграмму). Я еще только только впервые увидел этот Entity Framework, мне так проще.

P.S. Поставил SqLite в проект уже через Nuget. Создал модель, но БД еще не создавал. Не знаю что там и где выбрать или написать... Столько всяких менюшек, глаза разбегаются, если можно приведите кто нибудь скрины или статью какую нибудь со скринами действий по порядку...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2016, 07:48
Ответы с готовыми решениями:

Entity Framework 6.0 и sqlite
Добрый день! Пытаюсь использовать Entity Framework 6.0 в рамках среды VS2013 с БД sqlite. Добавляю...

Entity Framework + Sqlite
Имеется ряд проблем с EF. Есть: База данных SqLite Руками написанные классы для моделей. ...

SQlite with Entity Framework
Здравствуйте, в тестовом задании нужно создать приложение работающее с SQLite. Хотелось бы при этом...

В Entity Framework использовать SQLite
Доброе время суток! Пытаюсь использовать Entity Framework в VS2013 с БД sqlite. Добавляю к проекту...

Database first, SQLite, Entity Framework
Пытался подключить SQLite базу как на этом видео: https://vimeo.com/103372740. Не получается когда...

13
_exp10der_
Warrior
491 / 418 / 177
Регистрация: 23.11.2014
Сообщений: 932
26.04.2016, 00:18 2
Работа с библиотекой AutoMapper вот пример можете посмотреть, тут на основании объявленных cyщностей/классов(Code First) создаются запросы.
Лучше не через диаграмму тогда, а запросами https://www.sqlite.org/cli.html
http://www.entityframeworktutorial.net/ вот более менее нормальный сайт с базовым туториалом.
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
26.04.2016, 06:39  [ТС] 3
_exp10der_, мне вот это все левое не надо! Мне надо просто объяснить как создать БД встроенными средствами в VS через конструктор, заменив MS SQL Server на SqLite.
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
30.04.2016, 09:51  [ТС] 4
Вопрос актуален!!!
0
30.04.2016, 09:51
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
01.05.2016, 14:59  [ТС] 5
Никто не знает? -_-
0
insite2012
Модератор
Эксперт .NET
4885 / 3837 / 1097
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
01.05.2016, 15:01 6
Dark Byte, насколько я помню, при работе с EF и SQLite есть одна проблема (по крайней мере, у меня так было) - глюки при попытке работы через code first. Не получается создать таблицы. Может, они уже устранили это, а может и нет. Если через database first, то все работает.
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
01.05.2016, 15:44  [ТС] 7
Цитата Сообщение от insite2012 Посмотреть сообщение
Dark Byte, насколько я помню, при работе с EF и SQLite есть одна проблема (по крайней мере, у меня так было) - глюки при попытке работы через code first. Не получается создать таблицы. Может, они уже устранили это, а может и нет. Если через database first, то все работает.
Да при чем тут это? У меня все нормально создается. Проблема лишь в том чтобы заменить MS Sql на SqLite.
0
insite2012
Модератор
Эксперт .NET
4885 / 3837 / 1097
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
01.05.2016, 16:40 8
Цитата Сообщение от Dark Byte Посмотреть сообщение
У меня все нормально создается.
Если у вас все нормально создается, то после первого запуска программы (при использовании code first) БД у вас уже должна быть. Тогда в чем, собственно, вопрос?
Цитата Сообщение от Dark Byte Посмотреть сообщение
заменить MS Sql на SqLite.
Добавьте ссылку на System.Data.SQLite, импортируйте требуемое пространство имен и используйте типы, определенные в этой библиотеке.
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
01.05.2016, 16:58  [ТС] 9
Цитата Сообщение от insite2012 Посмотреть сообщение
Если у вас все нормально создается, то после первого запуска программы (при использовании code first) БД у вас уже должна быть. Тогда в чем, собственно, вопрос?
Во первых я не использую code first. Мне больше понравилось создавать через конструктор. Во вторых я говорю что у меня создается модель, код и все такое. А вот БД как создать по всему этому я не знаю.

Добавлено через 6 минут
Цитата Сообщение от Dark Byte Посмотреть сообщение
А вот БД как создать по всему этому я не знаю.
Точнее даже так: я знаю как создать БД MS SQL Server, но не знаю как заменить его на SqLite. Чтобы для создания БД использовался именно SqLite. Это чрезвычайно принципиально, потому что на универских компах видите ли не стоит SQL Server... Я еще с прошлым курсачом в этом плане лажанулся, не знал. Теперь не рискну его использовать. Лучше легковесный SqLite который можно с собой таскать.
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
01.05.2016, 17:09  [ТС] 10
Вот смотрите скрин. То что у меня есть уже. Как дальше???
0
Миниатюры
Использование Entity Framework совместно с SQLite  
insite2012
Модератор
Эксперт .NET
4885 / 3837 / 1097
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
01.05.2016, 17:11 11
Цитата Сообщение от Dark Byte Посмотреть сообщение
не знаю как заменить его на SqLite.
Тут посмотрите.
0
Dark Byte
29 / 46 / 19
Регистрация: 23.10.2014
Сообщений: 1,001
Завершенные тесты: 2
02.05.2016, 21:45  [ТС] 12
Цитата Сообщение от insite2012 Посмотреть сообщение
Тут посмотрите.
Это уже интереснее. Скачал и поставил bundle для x64 framework 4.0. Дошел до шага Change Data Source, но у меня там нету в выборе SqLite... Подозреваю что-то связанное с вот этим:
It is important that the DDEXprovider version matches the version of the current SQLite EF6 NuGet package that you use in your project!
Не очень понял что тут имеется ввиду, хотя переводил яндекс-переводчиком...

Добавлено через 18 часов 42 минуты
insite2012, таки что можно сделать? Вот что интересно я решил попробовать сделать все таки через code first. На самом деле так может быть даже удобнее. Я просто не пробовал. Там вроде через удобный конструктор диаграмкой... С другой стороны там создается куча лишних файлов, а тут всего один файл и все... И я тут начал смотреть что в конфиге. Возможно просто надо настроить там? Вот смотрите что сейчас (это я еще sqlite подключил):
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit [url]http://go.microsoft.com/fwlink/?LinkID=237468[/url] -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
    </providers>
  </entityFramework>
  <connectionStrings>
    <add name="Model1" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=ConsoleApplication2.Model1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="System.Data.SQLite.EF6" />
      <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
      <remove invariant="System.Data.SQLite" />
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>
</configuration>
Но это все автоматически сгенерировалось. Т.е. для БД будет использоваться MS SQL. А как заменить чтобы SQLite был? Я поэкспериментировал, но че то все время ошибки, в общем не знаю как настроить.

Добавлено через 9 часов 41 минуту
Ушел на SQL CE.
0
insite2012
Модератор
Эксперт .NET
4885 / 3837 / 1097
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
02.05.2016, 21:46 13
Цитата Сообщение от Dark Byte Посмотреть сообщение
Ушел на SQL CE
Таки да, наверное лучший вариант. Я попробовал по той ссылке что выше, но у меня Студия ниже (пользуюсь 2010), и толком ничего не пошло.
0
_exp10der_
Warrior
491 / 418 / 177
Регистрация: 23.11.2014
Сообщений: 932
02.05.2016, 22:26 14
Конфинг можно взять из моего проекта что кидал выше
Для создания бд нужно писать свой класс самый примитивный способ
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.IO;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Infrastructure.Annotations;
 
namespace ConsoleApplication14.data
{
    class SqliteContextInitializer<T> : IDatabaseInitializer<T>
        where T : DbContext
    {
        bool _dbExists;
        DbModelBuilder _modelBuilder;
 
        public SqliteContextInitializer(string dbPath, DbModelBuilder modelBuilder)
        {
            _dbExists = File.Exists(dbPath);
            _modelBuilder = modelBuilder;
        }
 
        public void InitializeDatabase(T context)
        {
            if (_dbExists)
                return;
 
            var model = _modelBuilder.Build(context.Database.Connection);
 
            using (var xact = context.Database.BeginTransaction())
            {
                try
                {
                    CreateDatabase(context.Database, model);
                    xact.Commit();
                }
                catch (Exception)
                {
                    xact.Rollback();
                    throw;
                }
            }
        }
 
        class Index
        {
            public string Name { get; set; }
            public string Table { get; set; }
            public List<string> Columns { get; set; }
        }
 
        private void CreateDatabase(Database db, DbModel model)
        {
            const string tableTmpl = "CREATE TABLE [{0}] (\n{1}\n);";
            const string columnTmpl = "    [{0}] {1} {2}"; // name, type, decl
            const string primaryKeyTmpl = "    [{0}] INTEGER PRIMARY KEY AUTOINCREMENT ";
            const string foreignKeyTmpl = "    FOREIGN KEY ({0}) REFERENCES {1} ({2})";
            const string indexTmpl = "CREATE INDEX {0} ON {1} ({2});";
 
            var indicies = new Dictionary<string, Index>();
 
            foreach (var type in model.StoreModel.EntityTypes)
            {
                var defs = new List<string>();
 
                // columns
                foreach (var p in type.Properties)
                {
                    var decls = new HashSet<string>();
 
                    if (!p.Nullable)
                        decls.Add("NOT NULL");
 
                    var annotations = p.MetadataProperties
                        .Select(x => x.Value)
                        .OfType<IndexAnnotation>();
 
                    foreach (var annotation in annotations)
                    {
                        foreach (var attr in annotation.Indexes)
                        {
                            if (attr.IsUnique)
                                decls.Add("UNIQUE");
 
                            if (string.IsNullOrEmpty(attr.Name))
                                continue;
 
                            Index index;
                            if (!indicies.TryGetValue(attr.Name, out index))
                            {
                                index = new Index
                                {
                                    Name = attr.Name,
                                    Table = type.Name,
                                    Columns = new List<string>(),
                                };
                                indicies.Add(index.Name, index);
                            }
                            index.Columns.Add(p.Name);
                        }
                    }
                    if (p.Name == "Id")
                    {
                        continue;
                    }
                    defs.Add(string.Format(columnTmpl, p.Name, p.TypeName, string.Join(" ", decls)));
                }
 
                // primary keys
                if (type.KeyProperties.Any())
                {
                    var keys = type.KeyProperties.Select(x => x.Name);
                    defs.Add(string.Format(primaryKeyTmpl, string.Join(", ", keys)));
                }
 
                // foreign keys
                foreach (var assoc in model.StoreModel.AssociationTypes)
                {
                    if (assoc.Constraint.ToRole.Name == type.Name)
                    {
                        var thisKeys = assoc.Constraint.ToProperties.Select(x => x.Name);
                        var thatKeys = assoc.Constraint.FromProperties.Select(x => x.Name);
                        defs.Add(string.Format(foreignKeyTmpl,
                            string.Join(", ", thisKeys),
                            assoc.Constraint.FromRole.Name,
                            string.Join(", ", thatKeys)));
                    }
                }
 
                // create table
                var sql = string.Format(tableTmpl, type.Name, string.Join(",\n", defs));
                db.ExecuteSqlCommand(sql);
            }
 
            // create index
            foreach (var index in indicies.Values)
            {
                var columns = string.Join(", ", index.Columns);
                var sql = string.Format(indexTmpl, index.Name, index.Table, columns);
                db.ExecuteSqlCommand(sql);
            }
        }
    }
}
2
02.05.2016, 22:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2016, 22:26

Создать базу данных на SQLite через entity framework
Добрый день, задача по коду (code first) создать базу данных на SQlite через entity framework,...

Изменить базу данных с MySQL на SQLite в проекте с Entity Framework code first
Добрый день, подскажите пожалуйста: Имеется проект C# приложение windows form с entity framework...

Странно работает метод StartsWith при запросе к БД SQLite c Entity Framework
Всем привет, помогите кто может. Есть проект c# windows form с entity framework code first. После...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru