dir.by  
  Поиск  
Программирование, разработка, тестирование
Entity Framework (EF5, EF6) для работы с базой данных на C#
Соглашения по преобразование типов, наименованию таблиц в Entity Framework
  Посмотрели 5239 раз(а)    
 Соглашения в Entity Framework 
последнее обновление: 16 января 2019
В Entity Framework действуют соглашения по именованию таблиц, столбцов, преобразование типов.
Соглашение по преобразованию типов Базы данных в → C#. И преобразование типов C# в → Базу данных
Тип в базе данных SQL Server
преобра
зуется в
C# тип
преобра
зуется в
Тип в базе данных SQL Server
bit
bool
bit
tinyint
byte
tinyint
smallint
short
smallint
int
int
int
real
float
real
float
double
float
numeric
decimal
money
decimal
decimal
date
datetime
datetime2
DateTime
datetime
nchar
ntext
char
nvarchar
text
varchar
string
nvarchar(MAX)
byte[]
varbinary(MAX)
int
На заметку!
Чтобы создалась в базе данных был тип только date
нужно описать C# класс так:
  C#  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema; // подключаем распознование [...]

namespace Plan.Models
{
     public class Book
     {
          public int Id { get; set; }

          [Column(TypeName="date")]
          public DateTime StartDate { get; set; }

          public string Name { get; set; }
     }
}
Может ли колонка в Базе данных содержать NULL значение ?
Первичный ключ
(колонка ID или id или ID)
по умолчанию в Базе данных имеет NOT NULL.
Колонки в базе данных, созданные по C# классу из числовых типов и времени: DateTime, bool, char, decimal, int, double, float
по умолчанию в Базе данных имеет NOT NULL.
Колонки в базе данных, созданные по C# классу из ссылочных типов (string, array, ...)
по умолчанию в Базе данных имеет NULL.
Колонки в базе данных, созданные по C# классу из свойств с типом Nullable или тип?
по умолчанию в Базе данных имеет NULL.
Как сделать чтобы тип int мог иметь null в базе данных
Когда мы пишем int колонка не может содержать NULL значение
  C#  
public class Task
{
     public int Id { get; set; }
     public int Price { get; set; }
}

Таблица в базе данных:
---------------------------------------
Когда мы пишем int? колонка может содержать NULL значение
  C#  
public class Task
{
     public int Id { get; set; }
     public int? Price { get; set; }
}

Таблица в базе данных:
---------------------------------------
Это правило относится ко все простым типам: bool, char, decimal, int, double, float
 Внешний ключ (Foreign Key) и каскадное удаление 
Внешний ключ (Foreign Key) это связь с другой таблицей.

Чтобы образовать внешний ключ нужно чтобы
Имя_свойства_в_нашем_классе
=
Имя_класса_связанной_таблицы + Имя_ключа_из_связанной_таблицы

Каскадное удаление
• Если внешний ключ определяется как int? то внешний ключ может иметь null значения и нет каскадного удаления.
• Если внешний ключ определяется как int то внешний ключ не может иметь null значения и будет каскадное удаление.
Пример1 (foreign key может быть null)
  C#  
public class UserContext : DbContext
{
     // MyConnection1 это соединение с базой данных описанное в файле web.config
     public UserContext() : base("MyConnection1")
     {
     }

     public DbSet<User> Users {get; set;}
     public DbSet<Task> Tasks { get; set; }
}

public class User
{
     public int Id {get;set;}
     public string Email {get; set;}
     public string Password{get; set;}
}

public class Task
{
     public int Id { get; set; }
     public int Price { get; set; }

     public int? UserId { get; set; } // определяем внешний ключ (int? значит может иметь null значение)
     public User User { get; set; } // это тоже необходимо для внешнего ключа
}
На заметку!
Если внешний ключ определяется как int? то внешний ключ может иметь null значения и нет каскадного удаления.
В MS Sql Server база данных выглядит так:
Пример2 (foreign key не может быть null)
  C#  
public class UserContext : DbContext
{
     // MyConnection1 это соединение с базой данных описанное в файле web.config
     public UserContext() : base("MyConnection1")
     {
     }

     public DbSet<User> Users {get; set;}
     public DbSet<Task> Tasks { get; set; }
}

public class User
{
     public int Id {get;set;}
     public string Email {get; set;}
     public string Password{get; set;}
}

public class Task
{
     public int Id { get; set; }
     public int Price { get; set; }

     public int UserId { get; set; } // определяем внешний ключ (int значит НЕ может иметь null значение)
     public User User { get; set; } // это тоже необходимо для внешнего ключа
}
На заметку!
Если внешний ключ определяется как int то внешний ключ НЕ может иметь null значения и будет каскадное удаление.
В MS Sql Server база данных выглядит так:
Выбор названий для таблиц и столбцов
С помощью специального класса PluralizationService Entity Framework проводит сопоставление между именами классов моделей и именами таблиц. При этом таблицы получают по умолчанию в качестве названия множественное число в соответствии с правилами английского языка, например, класс User - таблица Users, класс Person - таблица People (но не Persons!).

Названия столбцов получают названия свойств модели.

Если нас не устраивают названия таблиц и столбцов по умолчанию, то мы можем переопределить данный механизм с помощью:
Дата аннотаций в [...]
Fluent API.
 
← Предыдущая тема
Что такое Entity Framework?
 
Следующая тема →
Внешний ключ (Foreign Key) и каскадное удаление
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

Картинки

Объявления
Объявления
Entity Framework (EF5, EF6) для работы с базой данных на C#  
Что такое Entity Framework?
Типы в Entity Framework
Соглашения по преобразование типов, наименованию таблиц в Entity Framework
Внешний ключ (Foreign Key) и каскадное удаление
DateTime & только Date & только Time в Entity Framework
Code First
Code First. Мы пишем C# класс. Entity Framework по нашему C# классу → создает и заполняет таблицу в базе данных
Auto Code First. Entity Framework из существующей таблицы в базе данных → создает C# класс
Database First
Database First. Entity Framework из существующей таблицы в базе данных → создает C# класс
Model First
Model First. Мы создаем модель в Visual Studio. По модели Entity Framework → создает C# классы и Базу данных
Работа с данными
Перебор данных в Entity Framework
Добавление данных в Entity Framework
Изменение (редактирование) данных в Entity Framework
Удаление данных в Entity Framework
Инициализация и миграция базы данных
Инициализация базы данных в Entity Framework. DropCreateDatabaseAlways позволяет при каждом новом запуске заполнять базу данных заново
Выполнение миграции Базы Данных в Entity Framework (если уже кто-то раньше сделал cs файл миграции, а мне хочется обновить у себя на компютере базу данных я выполняю миграцию то есть вызываю EntityFramework\Update-Database)
Создание и выполнение миграции Базы Данных в Entity Framework (я поменял c# класс, потом вызываю EntityFramework\add-migration т.е. автоматически добавляется в проект cs файл с кодом миграции, потом вызываю EntityFramework\Update-Database т.е. выполняется файл миграции и меняется база данных)
SQL в Entity Framework
SQL команды в Entity Framework
Транзакции в Entity Framework
Управление транзакциями в Entity Framework
Дополнительные темы, вопросы
Что такое <connectionStrings> в .config файле для Entity Framework (EF5, EF6)
При вызове EntityFramework\Update-Database появляется ошибка "System.Data.SqlClient.SqlException (0x80131904). A network-related or instance-specific error occurred while establishing a connection to SQL Server."
При вызове EntityFramework\Update-Database появляется ошибка "Your startup project '...' doesn't reference Microsoft.EntityFrameworkCore.Design"
WWW сайты для изучения Entity Framework
Сайты для изучения Entity Framework

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика