Code First là gì?
Entity Framework đã ra mắt cách tiếp cận Code First trong Entity Framework 4.1. Code First hầu hết có ích trong Thiết kế phía domain.
Bạn đang xem: Code first là gì
Trong bí quyết tiếp cận Code First, các bạn tập trung vào miền của áp dụng với ban đầu tạo nên những lớp mang đến thực thể miền nuốm do thi công cơ sở dữ liệu trước rồi chế tạo các lớp khớp cùng với kiến tạo cơ sở dữ liệu của người sử dụng. Hình dưới đây minh họa cách tiếp cận Code First.

Nlỗi chúng ta cũng có thể thấy trong hình bên trên, Entity Framework API sẽ khởi tạo cửa hàng dữ liệu dựa vào cấu hình với các lớp miền của khách hàng. Vấn đề này có nghĩa là bạn cần bước đầu viết code trước bằng C# hoặc VB.NET cùng tiếp đến Entity Framework (EF) sẽ tạo các đại lý dữ liệu từ bỏ code của người sử dụng.
Quy trình thao tác với Code First
Hình sau đây minh họa quá trình trở nên tân tiến Code First.

Quy trình cải cách và phát triển theo cách tiếp cận Code First đã là: Tạo hoặc sửa đổi các lớp miền -> cấu hình những lớp miền này bởi các thuộc tính chú giải dữ liệu hoặc Fluent API -> Tạo hoặc update lược thứ đại lý tài liệu bằng automated migration hoặc code-based migration.
Các quy ước vào Code First
Các quy ước là những cỗ phép tắc khoác định auto cấu hình một mô hình quan niệm dựa trên các lớp miền của bạn Lúc làm việc cùng với phương pháp tiếp cận Code First.
Nlỗi chúng ta đã thấy vào ví dụ sống trên, Entity Framework API đang cấu hình các khóa bao gồm, khóa nước ngoài, những mối quan hệ, kiểu dáng dữ liệu của cột, v.v. trường đoản cú các lớp miền cơ mà không cần thông số kỹ thuật bổ sung cập nhật.
Như vậy là vì những quy ước của Entity Framework Code First. Nếu những lớp miền của người tiêu dùng tuân theo những quy ước thì lược vật dụng đại lý dữ liệu sẽ được cấu hình dựa trên những quy ước này.
Các quy ước trong Entity Framework 6.x Code First được quan niệm trong namespace System.Data.Entity.ModelConfiguration.Conventions .
Bảng sau liệt kê các quy ước khoác định của Code First:
Lược đồ | Theo mặc định, EF chế tác tất cả những đối tượng người dùng DB vào lược đồ vật dbo . |
Tên bảng | + "s" EF sẽ tạo nên bảng DB cùng với thương hiệu lớp thực thể thêm "s" nghỉ ngơi cuối, ví dụ: lớp Student sẽ ánh xạ tới bảng Students. |
Tên khóa bao gồm | 1) Id 2) + "Id" (ko tách biệt chữ hoa chữ thường) EF sẽ tạo cột khóa chủ yếu mang đến trực thuộc tính mang tên Id hoặc + "Id" (ko tách biệt chữ hoa chữ thường). |
Tên khóa ngoại | Theo khoác định, EF sẽ search nằm trong tính khóa nước ngoài bao gồm cùng tên cùng với thương hiệu khóa chủ yếu của thực thể chủ yếu.Nếu thuộc tính khóa ngoại ko trường thọ, thì EF sẽ khởi tạo cột khóa ngoại vào bảng Db với + "_" + ví dụ: EF sẽ tạo nên cột khóa ngoại Grade_GradeId trong bảng Students nếu như thực thể Student không đựng ở trong tính khóa ngoại đến Grade. |
Cột Null | EF tạo nên một cột null cho toàn bộ các ở trong tính phong cách tsi mê chiếu với các trực thuộc tính kiểu dáng nguyên thủy nullable, ví dụ: string, Nullable , Student, Grade (toàn bộ các ở trong tính giao diện lớp) |
Cột Not Null | EF tạo nên những cột Not Null cho các ở trong tính khóa thiết yếu và những trực thuộc tính hình dáng quý giá ko nullable, ví dụ: int, float, binary, datetime, v.v. |
Thđọng từ bỏ cột | EF sẽ khởi tạo những cột theo thuộc thứ tự như những trực thuộc tính vào một tờ thực thể. Tuy nhiên, các cột khóa chủ yếu sẽ được dịch chuyển lên trước tiên. |
Ánh xạ trực thuộc tính vào DB | Theo khoác định, tất cả các ở trong tính đang ánh xạ cho tới cơ sở dữ liệu. Sử dụng nằm trong tính |
Cascade delete | Được bật theo mang định đến toàn bộ các các loại quan hệ. |
Bảng sau liệt kê giao diện dữ liệu C# được ánh xạ cùng với kiểu dáng tài liệu SQL Server.
int | int |
string | nvarchar(Max) |
decimal | decimal(18,2) |
float | real |
byte<> | varbinary(Max) |
datetime | datetime |
bool | bit |
byte | tinyint |
short | smallint |
long | bigint |
double | float |
char | Không ánh xạ |
sbyte | Không ánh xạ (ném nhẹm ra exception) |
object | Không ánh xạ |
Hình dưới đây minc họa ánh xạ quy ước cùng với cửa hàng tài liệu.

Quy ước về mọt quan hệ
Entity Framework 6 sản xuất quan hệ một-nhiều bằng phương pháp sử dụng trực thuộc tính điều phối theo quy ước khoác định. Phần này sẽ tiến hành trình diễn cụ thể vào nội dung bài viết khác.
Lưu ý: Entity Framework 6 không có những quy ước mặc định cho các quan hệ một-một với nhiều-các. Bạn đề nghị thông số kỹ thuật chúng bằng Fluent API hoặc DataAnnotation.Quy ước kiểu dáng phức tạp
Code First sản xuất hình trạng phức hợp đến lớp không bao hàm trực thuộc tính khóa và khóa bao gồm ko được đăng ký bởi thuộc tính DataAnnotation hoặc Fluent API.
Phần này trình diễn tổng quan tiền về những quy ước trong Code First. Các quy ước này hoàn toàn có thể được ghi đè cổ bằng các sử dụng nằm trong tính DataAnnotation hoặc Fluent API.
Khởi tạo ra cửa hàng dữ liệu trong Code First
Tại phần này, chúng ta sẽ mày mò cách Entity Framework quyết định tên cửa hàng dữ liệu với máy chủ trong những lúc khởi tạo ra các đại lý dữ liệu Theo phong cách tiếp cận Code First.
Hình sau đây cho biết một quy trình khởi chế tác các đại lý tài liệu, dựa trên tmê say số được truyền trong cách làm khởi chế tạo cửa hàng của lớp Context được kế thừa từ bỏ lớp DbContext:

Tsay mê số khởi sản xuất các đại lý dữ liệu
Theo hình trên, cách làm khởi sinh sản các đại lý của lớp Context hoàn toàn có thể có tyêu thích số sau:
Không bao gồm tmê say số.Tên cửa hàng tài liệu.Tên chuỗi liên kết.Không gồm tđê mê số
Nếu bạn không chỉ có định tmê mệt số trong cách tiến hành khởi chế tạo cơ sở của lớp Context thì nó sẽ khởi tạo cơ sở tài liệu vào máy chủ SQLEXPRESS toàn thể của khách hàng với tên khớp cùng với Namespace. Tên lớp Context.
Ví dụ, Entity Framework (EF) sẽ tạo một cơ sở tài liệu mang tên SchoolDataLayer.Context cho lớp Context sau:
namespace SchoolDataLayer public class Context: DbContext public Context(): base() Tên cửa hàng dữ liệu
Bạn cũng hoàn toàn có thể chỉ định và hướng dẫn thương hiệu cơ sở tài liệu làm tmê man số trong cách làm khởi chế tạo các đại lý của lớp Context.
Nếu các bạn chỉ định và hướng dẫn tđắm say số thương hiệu cửa hàng tài liệu, thì Code First sẽ tạo cửa hàng tài liệu cùng với tên các bạn sẽ chỉ định và hướng dẫn trong cách làm khởi sản xuất cơ sở trong sever cơ sở dữ liệu SQLEXPRESS toàn bộ.
Ví dụ, Code First sẽ tạo nên cửa hàng dữ liệu có tên MySchoolDB mang đến lớp Context sau.
namespace SchoolDataLayer public class Context: DbContext public Context(): base("MySchoolDB") Tên chuỗi kết nối
Quý Khách cũng rất có thể hướng dẫn và chỉ định chuỗi kết nối vào tiện ích.config hoặc website.config và chỉ định thương hiệu chuỗi liên kết bước đầu bởi "name =" trong cách thức khởi sinh sản các đại lý của lớp Context.
Hãy chu đáo ví dụ sau vị trí chúng ta truyền tmê say số name=SchoolDBConnectionString trong thủ tục khởi tạo ra đại lý.
namespace SchoolDataLayer public class Context: DbContext public SchoolDBContext() : base("name=SchoolDBConnectionString") App.config:
Trong lớp Context làm việc bên trên, Shop chúng tôi hướng dẫn và chỉ định tên chuỗi liên kết làm cho tsi số. Xin chú ý rằng tên chuỗi liên kết buộc phải bắt đầu bởi "name =", nếu không, nó vẫn coi nó là tên các đại lý tài liệu.
Tên cửa hàng tài liệu trong chuỗi liên kết trong App.config là SchoolDB. Entity Framework (EF) sẽ tạo cửa hàng dữ liệu SchoolDB mới hoặc thực hiện cửa hàng dữ liệu SchoolDB hiện nay gồm trong SQL Server cục bộ.
Đảm nói rằng bạn gồm ở trong tính providerName="System.Data.SqlClient" mang đến cửa hàng dữ liệu Squốc lộ Server vào chuỗi kết nối.
Chiến lược khởi chế tác các đại lý dữ liệu
quý khách hàng đang tạo cơ sở dữ liệu sau khoản thời gian chạy áp dụng Code First lần thứ nhất, tuy nhiên lần thứ hai trsống đi thì sao? Nó sẽ khởi tạo ra một cửa hàng tài liệu new mỗi khi bạn chạy ứng dụng?
Còn môi trường thiên nhiên Production thì sao? Làm cố kỉnh như thế nào nhằm chúng ta update đại lý dữ liệu khi chúng ta biến đổi quy mô miền của bạn?
Để cách xử lý những kịch phiên bản này, bạn cần áp dụng một trong những kế hoạch khởi sản xuất cơ sở dữ liệu.
Có bốn chiến lược khởi chế tạo ra các đại lý tài liệu khác biệt vào Code First:
CreateDatabaseIfNotExists: Đây là trình khởi tạo nên mặc định. Như tên thường gọi, nó sẽ khởi tạo các đại lý dữ liệu còn nếu như không mãi sau theo cấu hình. Tuy nhiên, nếu khách hàng biến đổi lớp quy mô và kế tiếp chạy áp dụng cùng với trình khởi chế tác này, thì nó sẽ chỉ dẫn một nước ngoài lệ.DropCreateDatabaseIfModelChanges: Trình khởi chế tạo ra này xóa đại lý dữ liệu hiện nay tất cả với chế tạo ra các đại lý dữ liệu new, giả dụ các lớp quy mô của người sử dụng (các lớp thực thể) đã biết thành đổi khác. Vì vậy, bạn không phải lo lắng về vấn đề gia hạn lược vật các đại lý tài liệu của bản thân mình, khi những lớp mô hình của khách hàng chuyển đổi.DropCreateDatabaseAlways: Nlỗi tên cho thấy thêm, trình khởi tạo này đã xóa đại lý dữ liệu hiện bao gồm từng khi chúng ta chạy vận dụng, bất kỳ các lớp quy mô của doanh nghiệp tất cả biến hóa hay không. Điều này đã có lợi Khi bạn có nhu cầu tất cả một cửa hàng dữ liệu mới từng khi bạn chạy áp dụng, ví dụ như khi chúng ta vẫn cải tiến và phát triển vận dụng.Trình khởi chế tạo đại lý tài liệu tùy chỉnh: Quý Khách cũng rất có thể chế tạo trình khởi sinh sản thiết lập cấu hình của riêng rẽ mình, giả dụ các biện pháp bên trên không thỏa mãn nhu cầu thưởng thức của doanh nghiệp hoặc bạn có nhu cầu tiến hành một số trong những tiến trình không giống để có thể tạo cơ sở tài liệu bằng trình khởi tạo ra ở trên.Cách Code First auto khởi chế tạo ra các đại lý dữ liệu trong Entity Framework. Các kế hoạch khởi chế tác đại lý dữ liệu vào EF.
Trung Nguyenlongky.mobi

Chiến lược thừa kế vào Code First
Quý Khách hoàn toàn có thể thi công các lớp thực thể của mình bằng cách thực hiện tính kế thừa vào C#.
Trong lập trình phía đối tượng, các lớp gồm quan hệ "has a" cùng "is a", trong những lúc kia mô hình quan hệ giới tính dựa trên Squốc lộ chỉ gồm quan hệ "has a" giữa các bảng.
Hệ quản trị cơ sở tài liệu SQL ko hỗ trợ mối quan hệ "is a". Vì vậy, có tác dụng nỗ lực như thế nào bạn có thể ánh xạ những lớp thực thể tất cả quan hệ "is a" vào cơ sở tài liệu quan tiền hệ?
Dưới đấy là tía biện pháp tiếp cận khác biệt nhằm ánh xạ kế thừa vào các đại lý dữ liệu vào Code First:
Table per Hierarchy (TPH): Cách tiếp cận này đề nghị sản xuất một bảng bình thường cho cục bộ các lớp bên trong phân cấp cho thừa kế. Bảng này có một cột nhằm biệt lập giữa những lớp con. Đây là một trong những kế hoạch ánh xạ thừa kế mặc định trong Entity Framework.Table per Type (TPT): Cách tiếp cận này đề xuất tạo nên từng bảng đến từng lớp trong phân cấp cho kế thừa (chế tác bảng cho tất cả lớp thân phụ và lớp con).Table per Concrete Class (TPC): Cách tiếp cận này đề nghị chế tác mỗi bảng đến từng lớp con trong phân cấp kế thừa, nhưng lại ko tạo bảng mang lại lớp phụ thân. Vì vậy các thuộc tính của lớp thân phụ sẽ là một trong những phần của mỗi bảng của lớp bé.Xem cụ thể cha cách tiếp cạn để anh xạ kế thừa vào cửa hàng tài liệu vào Code First:
Trung Nguyenlongky.mobi

Cấu hình những lớp bên trong Entity Framework
Code First xây đắp mô hình tư tưởng tự các lớp thực thể của công ty bằng phương pháp áp dụng những quy ước mặc định.
EF 6 Code First tận dụng một mẫu mã xây dựng được hotline là quy ước về thông số kỹ thuật. Tuy nhiên, chúng ta cũng có thể ghi đtrần các quy ước này bằng phương pháp cấu hình các lớp thực thể của khách hàng nhằm cung ứng đến EF biết tin cần thiết.
Có nhì cách để thông số kỹ thuật những lớp thực thể của bạn:
Attribute chú giải dữ liệu.Fluent API.Attribute ghi chú dữ liệu
Chú đam mê dữ liệu là một trong những cấu hình dựa vào attribute dễ dàng và đơn giản, chúng ta cũng có thể áp dụng cho các lớp cùng nằm trong tính của chính nó.
Các attribute này không chỉ là giành riêng cho EF ngoài ra được áp dụng vào ASPhường.NET Web Form cùng ASPhường.NET MVC. Do kia, bọn chúng được đặt vào một namespace riêng lẻ là System.ComponentModel.DataAnnotations.
lấy một ví dụ sau đây minc họa vấn đề áp dụng một số attribute chú thích dữ liệu: