С# - mySQL и .NET Core 2.0

323
23 августа 2017, 14:49

Всем привет! Есть нужна использовать БД в проекте .NET Core 2.0. Знаком с БД mySQL. И собственно сам вопрос: Можно ли использовать и как нибудь подлючить mySQL к проекту на .NET Core 2.0? Проект является кросс-платформенным, т.е. нужно, чтобы БД работала на Linux Ubuntu и на Microsoft Windows. Если такое не возможно, тогда какие аналоги есть? И если можно, ссылку на документацию.

Answer 1

можно воспользоваться EntityFramework Core. Здесь официальная документация. Там же можно посмотреть о новшествах EF Core 2.0, а здесь русскоязычная документация

Подключить довольно просто: создаём класс, который наследуем от DbContext, в нём определяем классы через DbSet, которые будут нашими таблицами, после создаём миграции. Вот пример создания собственного контекста. В методе OnModelCreating определяются отношения "Многие ко многим" (здесь используется подключение к UWP. Отличия только в способе подключения БД, в методе OnConfiguring)

using Library.Core.Models.Entity;
using Microsoft.EntityFrameworkCore;
namespace Library.Core.DataBase
{
    public class LibraryContext : DbContext
    {
        #region Properties
        /// <summary>
        /// Авторы. 
        /// </summary>
        public DbSet<Author> Authors { get; set; }
        /// <summary>
        /// Издательства. 
        /// </summary>
        public DbSet<Publishing> Publishers { get; set; }
        /// <summary>
        /// Контракты. 
        /// </summary>
        public DbSet<Contract> Contracts { get; set; }
        /// <summary>
        /// Книги. 
        /// </summary>
        public DbSet<Book> Books { get; set; }
        /// <summary>
        /// Читательские билеты. 
        /// </summary>
        public DbSet<Reader> Readers { get; set; }
        /// <summary>
        /// Записи в билете. 
        /// </summary>
        public DbSet<Record> Records { get; set; }
        /// <summary>
        /// Отделы. 
        /// </summary>
        public DbSet<Genre> Genres { get; set; }
        #endregion

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite("Filename=library.db");
        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Record>()
                .HasKey(r => new { r.BookId, r.ReadersId });
            modelBuilder.Entity<Contract>()
                .HasKey(c => new { c.AuthorId, c.PublishingId });
            modelBuilder.Entity<Record>()
                .HasOne(rc => rc.Book)
                .WithMany(b => b.Records)
                .HasForeignKey(rc => rc.BookId);
            modelBuilder.Entity<Record>()
                .HasOne(rc => rc.Readers)
                .WithMany(r => r.Records)
                .HasForeignKey(rc => rc.ReadersId);
            modelBuilder.Entity<Contract>()
                .HasOne(cn => cn.Author)
                .WithMany(a => a.Contracts)
                .HasForeignKey(cn => cn.AuthorId);
            modelBuilder.Entity<Contract>()
                .HasOne(cn => cn.Publishing)
                .WithMany(p => p.Contracts)
                .HasForeignKey(cn => cn.PublishingId); 
        }
    }
}

Пример одной таблицы:

using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Template10.Mvvm;
namespace Library.Core.Models.Entity
{
    /// <summary>
    /// Книга. 
    /// </summary>
    public class Book : BindableBase
    {
        private string _name;
        private int _price;
        private int _count;
        private Genre _genre;
        private Contract _contract;
        private bool _selected; 
        public Book()
        {
            Records = new ObservableCollection<Record>(); 
        }
        /// <summary>
        /// Id книги. 
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// Название книги. 
        /// </summary>
        public string Name
        {
            get => _name;
            set => Set(ref _name, value); 
        }
        /// <summary>
        /// Кол-во книг. 
        /// </summary>
        public int Count
        {
            get => _count;
            set => Set(ref _count, value);
        }
        /// <summary>
        /// Стоимость книги. 
        /// </summary>
        public int Price
        {
            get => _price;
            set => Set(ref _price, value);
        }
        [NotMapped]
        public bool IsSelected
        {
            get => _selected;
            set => Set(ref _selected, value); 
        }
        /// <summary>
        /// Идентификатор контракта. 
        /// </summary>
        public int? ContractId { get; set; }
        /// <summary>
        /// Автор-Издательство. 
        /// </summary>
        public Contract Contract
        {
            get => _contract;
            set => Set(ref _contract, value);
        }
        /// <summary>
        /// Айди раздела. 
        /// </summary>
        public int? GenreId { get; set; }
        /// <summary>
        /// Раздел книги. 
        /// </summary>
        public Genre Genre
        {
            get => _genre;
            set => Set(ref _genre, value);
        }
        public ObservableCollection<Record> Records { get; set; }
    }
}
READ ALSO
Развернуть два проекта на одном домене

Развернуть два проекта на одном домене

Добрый день, подскажите пожалуйста возможно ли разместить два AspNet Core проекта на одном домене? Есть проект основного сайта (site

229
Textbox как считать значение

Textbox как считать значение

Есть вебформа с текстбоксом и кнопкойТекст бокс заполняю так :

287
Task.IsComplited до реального завершения задачи

Task.IsComplited до реального завершения задачи

Создаю кучу Task - в каждом игровой цикл, помещаю их в List<Task>:

173
Не удается запустить службу

Не удается запустить службу

Всем приветНаписал службу, в которой код рабочий

294