dir.by  
  Поиск  
Компьютер, программы
Entity Framework (EF5, EF6) for working with a C database#
 Соглашения в Entity Framework 
посмотрели 9301 раз
обновлено: 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)
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
What is Entity Framework?
 
Next topic →
Foreign Key and Cascade Deletion
 
Your feedback ... Comments ...
   
Your Name
Your comment (www links can only be added by a logged-in user)

  Объявления  
  Объявления  
 
What is Entity Framework?
Types in Entity Framework
Entity Framework Type Conversion, Table Naming Conventions
Foreign Key and Cascade Deletion
DateTime & Date & Time Only in the Entity Framework
Code First
Code First. We"re writing a C# class. Entity Framework uses our C# class → to create and populate a table in the database
Auto Code First. Entity Framework creates a C# class from an existing table in the → database
Database First
Database First. Entity Framework creates a C# class from an existing table in the → database
Model First
Model First. We create a model in Visual Studio. Using the Entity Framework model, → creates C# classes and a Database
Working with data
Iterating over data in the Entity Framework
Adding Data to the Entity Framework
Modifying (editing) data in the Entity Framework
Deleting data in the Entity Framework
Database initialization and migration
Initialize the database in the Entity Framework. DropCreateDatabaseAlways allows you to repopulate the database with each new run
Performing a Database Migration to Entity Framework (if someone has already made a cs migration file, and I want to update the database on my computer, I perform the migration, that is, call EntityFramework\Update-Database)
Creating and performing a Database migration to Entity Framework (I changed the c# class, then call EntityFramework\add-migration, i.e. the cs file with the migration code is automatically added to the project, then call EntityFramework\Update-Database, i.e. the migration file is executed and the database is changed)
SQL in Entity Framework
SQL Commands in Entity Framework
Transactions in the Entity Framework
Managing Transactions in the Entity Framework
Additional topics, questions
What is <connectionStrings> a .config file for Entity Framework (EF5, EF6)
When EntityFrameworkUpdate-Database is called, the error "System.Data.SqlClient.SqlException (0x80131904) is thrown. A network-related or instance-specific error occurred while establishing a connection to SQL Server. "
When calling EntityFrameworkUpdate-Database, the error "Your startup project "..." doesn"t reference Microsoft.EntityFrameworkCore.Design"
WWW Sites to Learn Entity Framework
Sites to learn Entity Framework

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