Форум программистов, компьютерный форум, киберфорум
SQLite
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
14 / 31 / 19
Регистрация: 20.08.2013
Сообщений: 730
1

SQLite+Entity Framework+NET4.0 Без ADO NET, и App.config, packages.config

02.12.2017, 20:46. Просмотров 674. Ответов 3
Метки нет (Все метки)

Тема не простая
SQLite+Entity Framework Без ADO NET, и App.config, packages.config

Вся Сборка будет на NET Framework 4.0 => NET4.0

Задача заключаеться сойденить вместе SQLite+Entity Framework
при этом подключние будет в DbContext к базе програмным способом, ни каких ADO NET подключений не будет

----------------------ADO NET-------------------------
Я так понял это способ скачивания пакета SQLite, из офицыального источника
дальше этот пакет устанавливаеться, и привязываеться к Visual Studio 2017
Появляеться в подключение к серверам, дополнительное действие
как подключение к SQLite базе. (Это не удобный метод)

Исключим этот способ ADO NET, подключемся средствами Entity Framework
Есть такой простой пример:
SQLite with C#.Net and Entity Framework

---------------------App.config, packages.config-------------
Есть еще вариант правка файлов App.config, packages.config, указание DefaltConnection
строки подключения для базы, это не удобный способ, ведь лучше програмным через *.cs способом
выберать с какой базой нам работать, так что не надо нам этого.


Создаем Проект ConsoleApp_SQLite
Создаем Библиотеку SQLite_Mini_Connect

В SQLite_Mini_Connect устанавливаем пакет System.Data.SQLite

Начинаем Вот классы для SQLite_Mini_Connect
SQLiteConfiguration.cs
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
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Core.Common;
using System.Data.SQLite;
using System.Data.SQLite.EF6;
using System.Linq;
using System.Text;
 
namespace SQLite_Mini_Connect.Models.SQLite_Libs
{
    /// <summary>
    /// Конфигуратор для SQLite Context
    /// </summary>
    public class SQLiteConfiguration : DbConfiguration
    {
        public SQLiteConfiguration()
        {
            SetProviderFactory("System.Data.SQLite", SQLiteFactory.Instance);
            SetProviderFactory("System.Data.SQLite.EF6", SQLiteProviderFactory.Instance);
            SetProviderServices("System.Data.SQLite", (DbProviderServices)SQLiteProviderFactory.Instance.GetService(typeof(DbProviderServices)));
        }
    }
}

SQLite_Mini_Context.cs
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
using SQLite_Mini_Connect.Models.SQLite_Libs;
using SQLite_Mini_Connect.Models.Tables;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;
using System.Data.SQLite;
using System.Linq;
using System.Text;
 
namespace SQLite_Mini_Connect.Models
{
    [DbConfigurationType(typeof(SQLiteConfiguration))]
    public class SQLite_Mini_Context : DbContext
    {
        public SQLite_Mini_Context(string PathNameDb) : base(new SQLiteConnection()
             {
                 ConnectionString = new SQLiteConnectionStringBuilder() { DataSource = PathNameDb, ForeignKeys = true }.ConnectionString
             }, true)
        {
            
 
        }
 
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            base.OnModelCreating(modelBuilder);
        }
 
        public DbSet<Table_User> TableUser { get; set; }
    }
 
}

Table_User.cs
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
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
 
namespace SQLite_Mini_Connect.Models.Tables
{
    /// <summary>
    /// Крендель
    /// </summary>
    [Table("Table_User")]
    public class Table_User
    {
        /// <summary>
        /// ID Кренделя
        /// </summary>
        [Key]
        public int ID { get; set; }
        /// <summary>
        /// Имя Чувака
        /// </summary>
        [Required(ErrorMessage ="Имя не может быть пустым!")]
        public string Name { get; set; }
    }
}
SQLite_Test.cs
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
using SQLite_Mini_Connect.Models.Tables;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace SQLite_Mini_Connect.Models
{
    public static class SQLite_Test
    {
        
 
        public static string MsgResult { get; set; } = string.Empty;
        public static bool SQLiteResult { get; set; } = false;
 
        /// <summary>
        /// Выполняем SQLite
        /// </summary>
        /// <param name="_Name">Имя Чувака</param>
        public static void AddBase(string _Name)
        {
            try
            {
                SQLite_Mini_Context sqlite_context = new SQLite_Mini_Context("Base.db");
 
                Table_User user = new Table_User() { Name = _Name };
                sqlite_context.TableUser.Add(user);
                sqlite_context.SaveChanges();
                SQLiteResult = true;
                MsgResult =  $"Чувак {_Name}, Успешно Добавлен!";
            }
            catch (Exception ex)
            {
                SQLiteResult = false;
                MsgResult = $"Ошибка: {ex.Message}\n\n\nДетально: {ex.StackTrace}";
            }
        }
    }
}

Подключив SQLite_Mini_Connect к ConsoleApp_SQLite
Основной Program.cs
Сделаем так
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
using SQLite_Mini_Connect.Models;
using SQLite_Mini_Connect.Models.Tables;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApp_SQLite
{
    class Program
    {
        
        static void Main(string[] args)
        {
            TitleConsole("SQLite+Entity Framework Без ADO NET");
 
            Console.Write("Enter Test...........");
            Pause();
 
            int exit = 0;
            while(exit== 0)
            {
                while (0 < 10)
                {
                    string name = string.Empty;
                    Console.Write("\nИмя Кренделя: ");
                    name = Console.ReadLine();
 
                    //Фигачим
                    SQLite_Test.AddBase(name);
                    if (SQLite_Test.SQLiteResult)
                        ErrorMsg(SQLite_Test.MsgResult);
                    else
                        ErrorMsg(SQLite_Test.MsgResult);
                }
 
                string command = string.Empty;
                Console.Write("\nКоманда Продолжения: ");
                command = Console.ReadLine();
 
                switch (command)
                {
                    case "yes":
                        exit = 0;
                        break;
                    case "exit":
                        exit = 1;
                        break;
                    default:
                        exit = 0;
                        ErrorMsg("Ошибка нет такой команды!");
                        break;
                }
            }
 
        }
 
        
 
        /// <summary>
        /// Сообщение об ошибке
        /// </summary>
        /// <param name="str">сообщение</param>
        static void ErrorMsg(string str)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(str);
            Console.ForegroundColor = ConsoleColor.Black;
        }
 
        /// <summary>
        /// Пауза
        /// </summary>
        static void Pause()
        {
            Console.ReadKey(true);
        }
 
        /// <summary>
        /// Титулка
        /// </summary>
        /// <param name="title">Название</param>
        static void TitleConsole(string title)
        {
            Console.BackgroundColor = ConsoleColor.White;
            Console.Clear();
            Console.Title = title;
            Console.ForegroundColor = ConsoleColor.Black;
        }
    }
}
Вот и все

Напомню если получите исключение скопируйте
Не удается загрузить DLL "SQLite.Interop.dll"
То папки Debug\x64, Debug\x86 из SQLite_Mini_Connect скопируйте, в ConsoleApp_SQLite в папку Debug

Когда начинаем выполнять получаем исключение
но когда дело доходит до сохранения обьекта
получаем ошибку, вот такая фигня
кто нибудь приручал SQLite+EF програмным путем без всяких настроек
App.config, и packages.config, подключаеться к базе, и вносить изменения, сохранять , удалять, изменять так далее.
Че делать копашусь, еще не нашел решения
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2017, 20:46
Ответы с готовыми решениями:

Отправьте C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config данный файл
Из-за отсутствия данного файла не работают приложения. Буду благодарен за помощь. Прикрепите...

Почему приложение ищет ИмяСборки.exe.config вместо app.config?
Вот с какого перепугу приложение ищет ИмяСборки.exe.config вместо app.config?

Откуда сначал берутся настройки приложения, из user.config или App.config?
Собственно в чём проблема. Есть данные которые я хочу сохранить в файле настроек приложения. Я...

Entity Framework provider type registered in the application config file could not be loaded
Вылетает ошибка &quot;The Entity Framework provider type 'MySql.Data.MySqlClient.MySqlProviderServices,...

3
1466 / 1036 / 145
Регистрация: 23.07.2010
Сообщений: 5,748
03.12.2017, 11:35 2
что это было???
1
1944 / 1535 / 463
Регистрация: 02.08.2011
Сообщений: 4,458
03.12.2017, 15:52 3
Цитата Сообщение от pincet Посмотреть сообщение
что это было???

Не по теме:


Как что? Украинские школьники программируют, без посторонней помощи, только лишь с гуглом :)
Anyway, молодец.

1
14 / 31 / 19
Регистрация: 20.08.2013
Сообщений: 730
03.12.2017, 18:04  [ТС] 4
Еще и Microsoft Visual C++ Runtime Library ставить АААА Ужас убить их мало
за такую кашу.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2017, 18:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Silverlight +Ado.net Entity Framework
Народ! хелп плиз ...кучу всего пересмотрел-научился работать с БД используя все, кроме...

ADO.Net Entity Framework неправильное наследование
Добрый день. Хотел спросить: В книге &quot;Нейгел К., Ивьен Б., Глинн Дж., Уотсон К. C# 4.0 и...

Применение entity framework и ADO.NET в различных программах
Приветствую всех. Нужно объяснить простыми и общими словами, на практическом опыте: в каких...

Верно ли, что entity framework - это настройка над ADO.NET
Сталкнулся на собесодовании с таким вопросом.Собедующий сказал что entity framework настройка над...


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

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

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