Форум программистов, компьютерный форум, киберфорум
C#: ASP.NET Core
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/55: Рейтинг темы: голосов - 55, средняя оценка - 4.75
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199

Не создаётся таблица в EF Core

02.11.2019, 16:43. Показов 11188. Ответов 20

Студворк — интернет-сервис помощи студентам
Добрый день, не создаются таблицы в EF core. Строку подключения считывает корректно, через SQL Server Object Explorer подключение есть, бросаю модели, контекст и контроллер. Пытался гуглить, но понимаю, что хожупо кругу.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class GalleryContext : DbContext
    {
        public DbSet<Image> Images { get; set; }
        public DbSet<Gallery> Galleries { get; set; }
        public GalleryContext(DbContextOptions<GalleryContext> options) 
            : base(options)
        {
           // Database.SetInitializer<GalleryContext>(new CreateDatabaseIfNotExists<GalleryContext>());
            Database.EnsureCreated();
        }
 
        //protected override void OnModelCreating(ModelBuilder modelBuilder)
        //{
 
           // modelBuilder.Entity<Gallery>().ToTable("Galleries");
            //modelBuilder.Entity<Image>().ToTable("Images");            
        //}
 
    }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 [Table("Galleries")]
    public class Gallery
    {
        [Key]
        [Column("ID")]
        public int ID { get; set; }
        [Required(ErrorMessage = "Укажите название галереи.")]
        [Display(Name = "Имя галереи")]
        [Column("Name")]
        public string Name { get; set; }
 
        public virtual ICollection<Image> Images { get; set; }
    }
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
   [Table("Images")]
    public class Image
    {
        [Key]
        [Column("ID")]
        public int ID { get; set; }
        // image name
        [Display(Name = "Имя изображения. (оставьте поле пустым и имя будет присвоено автоматически)")]
        [Column("Name")]
        public string Name { get {
                if (Name == null)
                    return Path;
                return Name;
            } }
 
        // image path
        [Required(ErrorMessage = "Укажите путь к изображению")]
        [DataType(DataType.Upload)]
        [Display(Name = "Выберите изображение.")]
        [Column("Path")]
        public string Path { get; set; }
 
        // image gallery
        [Required(ErrorMessage = "Укажите галерею")]
        [Display(Name = "Выберите галерею из списка.")]
        [ForeignKey("Gallery")]
        [Column("GalleryID")]
        public int GalleryID { get; set; }
 
        // image order for slider or galary
        [Display(Name = "Укажите очередь изображения. (при добавлении в слайдер или галерею)")]
        [Column("Order")]
        public int? Order { get; set; }
 
        // image position for articles
        [Display(Name = "Укажите позицию для изображения. (при добавлении в статью)")]
        [Column("Position")]
        public string Position { get; set; }
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
public class AddImageController : Controller
    {
        private GalleryContext db;
        public AddImageController(GalleryContext context)
        {
            db = context;
        }
 
        public async Task<IActionResult> AddImage()
        {
            return View(await db.Galleries.ToListAsync());
        }
        public IActionResult Create()
        {
            return View();
        }
        [HttpPost]
        public async Task<IActionResult> Create(Gallery gallery)
        {            
            db.Galleries.Add(gallery);
            await db.SaveChangesAsync();
            return RedirectToAction("AddImage");
        }
 
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2019, 16:43
Ответы с готовыми решениями:

Не создается таблица в БД
create table NambersProviders( idNamber int(10) auto_increment not null, primary key (idNamber), Mobil int (11) not null, ...

Не создается таблица бд
Доброго времени суток! Возникла потребность в создании новой таблицы базы данных, так сказать, в режиме он-лайн. Решил написать, что бы...

Не создается таблица
create table &quot;table_student&quot; ( NEW_ID int not null, OLD_ID int not null, primery key (NEW_ID, OLD_ID) ) Выбивает ошибку...

20
163 / 138 / 35
Регистрация: 25.11.2015
Сообщений: 910
02.11.2019, 17:21
1. Убрать атрибуты из модели.
2. провести миграцию
0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 17:42  [ТС]
Цитата Сообщение от yurickas Посмотреть сообщение
1. Убрать атрибуты из модели.
Required тоже или некоторые только?

Добавлено через 12 минут
Цитата Сообщение от yurickas Посмотреть сообщение
1. Убрать атрибуты из модели.
2. провести миграцию
Убрал все атрибуты, создалась пустая миграция. Добавил [Key] и [ForeignKey], миграция заполнилась, но таблица не создалась. Выбило ошибку "Cannot find the object "Image" because it does not exist or you do not have permissions."
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
02.11.2019, 17:56
Jocker, а зачем именно в конструктор пихать EnsureCreated?
Не надо этого делать, у конструктора другая ответственность.

Создайте первую миграцию (Initial migration) в проекте с бд через dotnet ef database...
И на старте целевого приложения запускайте миграции.
0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 18:04  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Jocker, а зачем именно в конструктор пихать EnsureCreated?
Так было в Метаните)
Сейчас попробую, как вы говорите)
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
02.11.2019, 18:07
C#
1
context.Database.Migrate()
0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 18:10  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
context.Database.Migrate()
это в конструкторе контекста?
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
02.11.2019, 18:15
Ну е-мое, базу вам где надо создавать? - Не при каждом же создании контекста.
Скорее при старте веб-приложения.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Jocker Посмотреть сообщение
это в конструкторе контекста?
Я конечно понимаю, что вы Jocker, но попробуйте быть серьезнее. :D

0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 19:39  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Создайте первую миграцию (Initial migration) в проекте с бд через dotnet ef database...
И на старте целевого приложения запускайте миграции.
Простите, что-то я жутко туплю(
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
GalleryContext context;
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
 
        public IConfiguration Configuration { get; }
 
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddDbContext<GalleryContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("GalleryConnection")));
            //context.Database.Migrate();
            services.AddMvc();
        }
Если без того кода, который Вы бросали, то миграция создаётся и заполняется. Единственное что, не создаёт таблицы и ругается: "Cannot find the object "Image" because it does not exist or you do not have permissions.". Если я правильно всё сделал (добавил Ваш код и создал новую миграцию в последующем обновив базу), то я не понял, где инициализировать контекст. Очень давно работал с ASP.NETом до этого(

Это в Startup
В Main'e же:
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
 public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();
            CreateDbIfNotExists(host);
            host.Run();
 
           
        }
 
        private static void CreateDbIfNotExists(IHost host)
        {
            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
 
                try
                {
                    var context = services.GetRequiredService<GalleryContext>();
                    context.Database.EnsureCreated();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex, "An error occurred creating the DB.");
                }
            }
        }
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
02.11.2019, 20:03
C#
1
//context.Database.Migrate();
Английским языком написано ведь: public void ConfigureServices(IServiceCollection services)
ConfigureServices - сконфигурировать сервисы. И ничего другого тут делать не надо.

В методе Configure в конце добавьте то, что у вас по сути уже есть:
C#
1
2
3
4
5
using (var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope())
            {
                var context = serviceScope.ServiceProvider.GetRequiredService<CarMoneyDbContext>();
                context.Database.Migrate();
            }
0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 20:10  [ТС]
Ругается на , который вы бросали)

"ServiceProvider" does not contain a definition for "GetRequiredService"

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
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())            
                app.UseDeveloperExceptionPage();            
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseRouting();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                    //pattern: "{action=Index}/{id?}");
 
            });
            using var serviceScope = serviceProvider.GetRequiredService<IServiceScopeFactory>().CreateScope();
            var context = serviceScope.ServiceProvider.GetRequiredService<GalleryContext>();
            context.Database.Migrate();
        }
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
02.11.2019, 20:14
Ну наверно надо посмотреть на текст исключения? - и подумать, что не так.
0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 20:16  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Ну наверно надо посмотреть на текст исключения? - и подумать, что не так.
До исключения не доходит. Программа не запускается
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
02.11.2019, 20:19
По F5 пробуйте.
0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 20:22  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
По F5 пробуйте.
На скрине ошибка...
0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 20:23  [ТС]
Вот... не загрузилось
Миниатюры
Не создаётся таблица в EF Core  
0
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
02.11.2019, 20:25  [ТС]
О, это правильный)
Миниатюры
Не создаётся таблица в EF Core  
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,227
02.11.2019, 20:28
Ну так если вы даже скрин нормально не в состоянии выложить с читаемым текстом ошибки, то это очень плохо...
Если вы думаете, что я с вами сейчас начну сюсюкаться, отвечая на все ваши последующие, по сути, простенькие вопросы, то вы ошибаетесь.
Не хотите думать головой - вам никто не поможет.
1
 Аватар для Jocker
1 / 1 / 3
Регистрация: 22.01.2015
Сообщений: 199
03.11.2019, 00:39  [ТС]
Цитата Сообщение от IamRain Посмотреть сообщение
Ну так если вы даже скрин нормально не в состоянии выложить с читаемым текстом ошибки, то это очень плохо...
Если вы думаете, что я с вами сейчас начну сюсюкаться, отвечая на все ваши последующие, по сути, простенькие вопросы, то вы ошибаетесь.
Не хотите думать головой - вам никто не поможет.
Я бросал ссылку, которая, видимо, на модерации. На ней скрин с текстом ошибки. Ну если это для Вас простые вопросы, то отлично, я хочу разобраться. Я переискал уже много в интернете материала, и пришёл сюда, потому что понял, что хожу вокруг да около. Скрином выше я показал, что программа не запускается, ни кнопкой, ни F5, ошибка компилятора. По сути я взял Ваш код и изменил в нём имя контекста на своё, вот и всё.

Добавлено через 4 часа 4 минуты
Если у кого-то будет такая же ошибка: мне помогло удалить все миграции в проекте и создать их заново.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
03.11.2019, 21:39
Цитата Сообщение от Jocker Посмотреть сообщение
Если у кого-то будет такая же ошибка: мне помогло удалить все миграции в проекте и создать их заново.
Какая такая? Ошибка подчеркивания текста красными волновыми линиями?
Очевидно проблема не в миграциях а в отсутствии using необходимых неймспейсов. Но изучать азы языка это для слабаков, истинные джокеры используют метод тыка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.11.2019, 21:39
Помогаю со студенческими работами здесь

Не создаётся таблица в БД
Здравствуйте! Существует база данных: &quot;atm-cms&quot;. Есть 2 файла: 1. Файл с формой отправки данных пользователя. (atm_install.php) 2. Файл...

Не создаётся таблица
Добрый день! Ребята, подскажите, по такой проблеме хочу создать таблицу из программы void __fastcall...

Не создается таблица в БД
После создания БД в Visual Studio 2015 нет кнопки создания таблицы. Скрин во вложении.

Не создается таблица в БД
Здравствуйте, не знаю, туда ли пишу, но все же.. Создал проект в WinForms и добавил к нему бд. После добавления и сохранения таблицы она не...

Не создается таблица в базе
Скажите пожалуйста, почему не создается таблица в базе данных? $host=&quot;localhost&quot;; $db=&quot;registration&quot;; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru