×
=0) { let js = text.slice(pos1, pos2); + '<\/' + "script" + '>'; arrText.push(js); // next pos1 = pos2; continue; } } } break; } return arrText; } function OpenDialog(parentDiv, urlContent) { parentDiv = document.getElementById('modal-background'); // new !!!!!!! parentDiv.appendChild(document.getElementById('modal-template')); document.getElementById('modal-background').style.display = "block"; document.getElementById('modal-template').style.display = "flex"; // !!!!! document.getElementById('modal-body').innerHTML = ""; post_url(urlContent, "", function(text_from_server) { var element = document.getElementById('modal-body'); element.innerHTML = text_from_server; // add scripts var arrJSText = get_scripts(text_from_server); for (var i=0; i
dir.by
Search
Programming, development, testing
→
Entity Framework (EF5, EF6) для работы с базой данных на C#
→
Соглашения по преобразование типов, наименованию таблиц в Entity Framework
Looked at
7068
times
Соглашения в Entity Framework
last updated: 16 January 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)
enum
→
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
.
← Previous topic
Что такое Entity Framework?
Next topic →
Внешний ключ (Foreign Key) и каскадное удаление
Your feedback ... Comments ...
Your Name
Your comment
(www links can only be added by a logged-in user)
+ Picture
Объявления
Объявления
•
Что такое 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