Code First là gì?

Entity Framework đã trình làng cách tiếp cận Code First vào Entity Framework 4.1. Code First chủ yếu hữu ích trong xây dựng hướng domain.

Bạn đang xem: Code first là gì

Bạn sẽ xem: Code first là gì

Trong cách tiếp cận Code First, bạn tập trung vào miền của vận dụng và ban đầu tạo các lớp mang lại thực thể miền nuốm vì thi công cơ sở tài liệu trước rồi tạo các lớp khớp với xây đắp cơ sở dữ liệu của bạn. Hình tiếp sau đây minh họa cách tiếp cận Code First.


*

Như chúng ta có thể thấy vào hình trên, Entity Framework API sẽ khởi tạo cơ sở tài liệu dựa trên cấu hình và những lớp miền của bạn. Điều này có nghĩa là bạn cần ban đầu viết code trước bằng C# hoặc VB.NET và sau đó Entity Framework (EF) sẽ khởi tạo cơ sở dữ liệu từ code của bạn.

Quy trình thao tác với Code First

Hình tiếp sau đây minh họa quy trình cải cách và phát triển Code First.


*

Quy trình cải tiến và phát triển theo giải pháp tiếp cận Code First đang là: sinh sản hoặc sửa đổi những lớp miền -> cấu hình các lớp miền này bằng những thuộc tính chú thích dữ liệu hoặc Fluent API -> sản xuất hoặc update lược vật dụng cơ sở dữ liệu bằng automated migration hoặc code-based migration.

Các quy cầu trong Code First

Các quy ước là các bộ quy tắc khoác định auto cấu hình một quy mô khái niệm dựa trên các lớp miền của công ty khi làm việc với bí quyết tiếp cận Code First.

Như chúng ta đã thấy vào ví dụ làm việc trên, Entity Framework API đã thông số kỹ thuật các khóa chính, khóa ngoại, các mối quan liêu hệ, kiểu dữ liệu của cột, v.v. Từ các lớp miền cơ mà không cần thông số kỹ thuật bổ sung.

Điều này là do các quy mong của Entity Framework Code First. Nếu các lớp miền của khách hàng tuân theo những quy ước thì lược đồ cơ sở tài liệu sẽ được thông số kỹ thuật dựa trên những quy mong này.

Các quy cầu trong Entity Framework 6.x Code First được khái niệm trong namespace System.Data.Entity.ModelConfiguration.Conventions .

Bảng sau liệt kê những quy ước mặc định của Code First:

Quy ướcMiêu tả
Lược đồTheo mang định, EF tạo tất cả các đối tượng người sử dụng DB vào lược vật dbo .
Tên bảng + "s" EF sẽ khởi tạo bảng DB với tên lớp thực thể thêm "s" sinh sống cuối, ví dụ: lớp Student sẽ ánh xạ cho tới bảng Students.
Tên khóa chủ yếu 1) Id 2) + "Id" (không sáng tỏ chữ hoa chữ thường) EF sẽ tạo cột khóa thiết yếu cho nằm trong tính mang tên Id hoặc + "Id" (không biệt lập chữ hoa chữ thường).
Tên khóa nước ngoài Theo mặc định, EF sẽ tìm trực thuộc tính khóa ngoại gồm cùng tên với thương hiệu khóa bao gồm của thực thể chính.Nếu thuộc tính khóa ngoại không tồn tại, thì EF sẽ tạo cột khóa nước ngoài trong bảng Db với + "_" + ví dụ: EF sẽ khởi tạo cột khóa nước ngoài Grade_GradeId vào bảng Students giả dụ thực thể Student không đựng thuộc tính khóa ngoại mang lại Grade.
Cột Null EF sản xuất một cột null cho toàn bộ các ở trong tính hình dáng tham chiếu và những thuộc tính thứ hạng nguyên thủy nullable, ví dụ: string, Nullable , Student, Grade (tất cả những thuộc tính phong cách lớp)
Cột Not Null EF tạo những cột Not Null cho những thuộc tính khóa chính và các thuộc tính kiểu cực hiếm không nullable, ví dụ: int, float, binary, datetime, v.v.
Thứ trường đoản cú cột EF sẽ khởi tạo các cột theo cùng thứ từ như các thuộc tính trong một tấm thực thể. Tuy nhiên, những cột khóa chủ yếu sẽ được dịch chuyển lên đầu tiên.
Ánh xạ ở trong tính vào DB Theo mang định, tất cả các thuộc tính đang ánh xạ tới các đại lý dữ liệu. áp dụng thuộc tính để loại bỏ thuộc tính hoặc lớp ko ánh xạ vào DB.
Cascade deleteĐược bật theo khoác định cho toàn bộ các một số loại mối quan liêu hệ.

Bảng sau liệt kê kiểu dữ liệu C# được ánh xạ cùng với kiểu dữ liệu SQL Server.

Kiểu dữ liệu C#Ánh xạ tới kiểu dữ liệu SQL Server
intint
stringnvarchar(Max)
decimaldecimal(18,2)
floatreal
bytevarbinary(Max)
datetimedatetime
boolbit
bytetinyint
shortsmallint
longbigint
doublefloat
charKhông ánh xạ
sbyteKhông ánh xạ (ném ra exception)
objectKhông ánh xạ

Hình sau đây minh họa ánh xạ quy cầu với cơ sở dữ liệu.


*

Quy cầu về mọt quan hệ

Entity Framework 6 tạo quan hệ một-nhiều bằng cách sử dụng nằm trong tính điều hướng theo quy ước mặc định. Phần này sẽ được trình bày chi tiết trong nội dung bài viết khác.

Lưu ý: Entity Framework 6 không có các quy mong mặc định cho các mối quan hệ một-một và nhiều-nhiều. Bạn cần thông số kỹ thuật chúng bởi Fluent API hoặc DataAnnotation.

Quy mong kiểu phức tạp

Code First sản xuất kiểu phức tạp cho lớp không bao gồm thuộc tính khóa cùng khóa thiết yếu không được đăng ký bằng trực thuộc tính DataAnnotation hoặc Fluent API.

Phần này trình bày tổng quan liêu về những quy mong trong Code First. Các quy cầu này có thể được ghi đè bằng những sử dụng thuộc tính DataAnnotation hoặc Fluent API.

Khởi sinh sản cơ sở dữ liệu trong Code First

Ở phần này, họ sẽ tò mò cách Entity Framework ra quyết định tên cơ sở dữ liệu và thứ chủ trong khi khởi sản xuất cơ sở dữ liệu theo giải pháp tiếp cận Code First.

Hình dưới đây cho biết thêm một quá trình khởi tạo đại lý dữ liệu, dựa trên tham số được truyền trong cách tiến hành khởi tạo cửa hàng của lớp Context được kế thừa từ lớp DbContext:


*

Tham số khởi tạo cửa hàng dữ liệu

Theo hình trên, cách làm khởi tạo đại lý của lớp Context rất có thể có tham số sau:

Không bao gồm tham số.Tên cửa hàng dữ liệu.Tên chuỗi kết nối.

Không gồm tham số

Nếu bạn không những định tham số trong phương thức khởi tạo đại lý của lớp Context thì nó sẽ khởi tạo cơ sở dữ liệu trong sever SQLEXPRESS viên bộ của người sử dụ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 đại lý dữ liệu mang tên SchoolDataLayer.Context đến lớp Context sau:

namespace SchoolDataLayer public class Context: DbContext public Context(): base() Tên đại lý dữ liệu

Bạn cũng hoàn toàn có thể chỉ định thương hiệu cơ sở dữ liệu làm tham số trong cách tiến hành khởi tạo các đại lý của lớp Context.

Nếu các bạn chỉ định thông số tên đại lý dữ liệu, thì Code First sẽ tạo nên cơ sở tài liệu với tên bạn đã chỉ định và hướng dẫn trong thủ tục khởi tạo đại lý trong sever cơ sở dữ liệu SQLEXPRESS cục bộ.

Ví dụ, Code First sẽ khởi tạo cơ sở dữ liệu mang tên MySchoolDB mang lại lớp Context sau.

namespace SchoolDataLayer public class Context: DbContext public Context(): base("MySchoolDB") Tên chuỗi kết nối

Bạn cũng có thể chỉ định chuỗi kết nối trong app.config hoặc web.config và hướng dẫn và chỉ định tên chuỗi kết nối bước đầu bằng "name =" trong thủ tục khởi tạo đại lý của lớp Context.

Hãy chú ý ví dụ sau nơi bọn họ truyền tham số name=SchoolDBConnectionString trong cách làm khởi chế tạo ra cơ sở.

namespace SchoolDataLayer public class Context: DbContext public SchoolDBContext() : base("name=SchoolDBConnectionString") App.config:

trong lớp Context nghỉ ngơi trên, shop chúng tôi chỉ định thương hiệu chuỗi kết nối làm tham số. Xin để ý rằng thương hiệu chuỗi liên kết phải bắt đầu bằng "name =", giả dụ không, nó vẫn coi nó là tên gọi cơ sở dữ liệu.

Tên cơ sở tài liệu trong chuỗi liên kết trong App.config là SchoolDB. Entity Framework (EF) sẽ khởi tạo cơ sở dữ liệu SchoolDB new hoặc thực hiện cơ sở dữ liệu SchoolDB hiện gồm trong SQL Server cục bộ.

Đảm nói rằng bạn bao gồm thuộc tính providerName="System.Data.SqlClient" cho cơ sở dữ liệu SQL vps trong chuỗi kết nối.

Chiến lược khởi tạo cửa hàng dữ liệu

Bạn sẽ tạo các đại lý dữ liệu sau khi chạy ứng dụng Code First lần thứ nhất tiên, tuy nhiên lần trang bị hai trở đi thì sao? Nó sẽ tạo ra một cơ sở tài liệu mới mỗi khi bạn chạy ứng dụng?

Còn môi trường xung quanh Production thì sao? Làm nạm nào nhằm bạn update cơ sở tài liệu khi bạn biến hóa mô hình miền của bạn?

Để xử lý những kịch phiên bản này, chúng ta phải thực hiện một trong những chiến lược khởi tạo các đại lý dữ liệu.

Có bốn kế hoạch khởi tạo các đại lý dữ liệu khác biệt trong Code First:

CreateDatabaseIfNotExists: Đây là trình khởi sản xuất mặc định. Như tên gọi, nó sẽ khởi tạo cơ sở dữ liệu nếu như không tồn trên theo cấu hình. Mặc dù nhiên, nếu bạn biến đổi lớp mô hình và tiếp nối chạy vận dụng với trình khởi sinh sản này, thì nó sẽ đưa ra một nước ngoài lệ.DropCreateDatabaseIfModelChanges: Trình khởi tạo này xóa cơ sở dữ liệu hiện có và chế tác cơ sở tài liệu mới, nếu các lớp mô hình của người sử dụng (các lớp thực thể) đã trở nên thay đổi. Do vậy, các bạn không phải lo ngại về việc gia hạn lược vật cơ sở dữ liệu của mình, khi các lớp mô hình của người sử dụng thay đổi.DropCreateDatabaseAlways: Như tên mang đến thấy, trình khởi tạo ra này sẽ xóa cơ sở tài liệu hiện gồm mỗi khi chúng ta chạy ứng dụng, bất kể các lớp mô hình của công ty có biến đổi hay không. Điều này sẽ hữu dụng khi bạn có nhu cầu có một cơ sở dữ liệu mới mỗi khi bạn chạy ứng dụng, ví dụ như như khi chúng ta đang cải cách và phát triển ứng dụng.Trình khởi tạo ra cơ sở tài liệu tùy chỉnh: bạn cũng có thể tạo trình khởi tạo thiết lập cấu hình của riêng mình, nếu những cách bên trên không thỏa mãn nhu cầu yêu cầu của người tiêu dùng hoặc bạn có nhu cầu thực hiện một vài quy trình khác để khởi tạo cơ sở tài liệu bằng trình khởi tạo thành ở trên.Cách Code First auto khởi chế tạo cơ sở tài liệu trong Entity Framework. Các chiến lược khởi tạo cơ sở tài liệu trong EF.Trung Nguyennasaconstellation.com
*

Chiến lược thừa kế trong Code First

Bạn rất có thể thiết kế những lớp thực thể của mình bằng phương pháp sử dụng tính thừa kế trong C#.

Trong lập trình phía đối tượng, những lớp có quan hệ "has a" với "is a", trong những lúc đó mô hình quan hệ dựa vào SQL chỉ có quan hệ "has a" giữa các bảng.

Hệ quản ngại trị cơ sở tài liệu SQL không cung cấp mối quan hệ giới tính "is a". Vì chưng vậy, làm cố kỉnh nào bạn có thể ánh xạ các lớp thực thể có mối quan hệ "is a" vào cơ sở dữ liệu quan hệ?

Dưới đây là ba giải pháp tiếp cận khác nhau để ánh xạ kế thừa vào cơ sở tài liệu trong Code First:

Table per Hierarchy (TPH): phương pháp tiếp cận này ý kiến đề nghị tạo một bảng chung cho toàn bộ các lớp trong phân cấp kế thừa. Bảng này có một cột để khác nhau giữa những lớp con. Đây là 1 trong chiến lược ánh xạ kế thừa mặc định trong Entity Framework.Table per Type (TPT): phương pháp tiếp cận này ý kiến đề xuất tạo mỗi bảng mang đến từng phần bên trong phân cấp kế thừa (tạo bảng cho cả lớp phụ vương và lớp con).Table per Concrete Class (TPC): giải pháp tiếp cận này đề nghị tạo từng bảng cho từng lớp nhỏ trong phân cấp kế thừa, nhưng mà không tạo nên bảng đến lớp cha. Vì vậy các thuộc tính của lớp thân phụ sẽ là 1 phần của từng bảng của lớp con.

Xem chi tiết ba phương pháp tiếp cạn để anh xạ kế thừa vào cơ sở tài liệu trong Code First:

Trung Nguyennasaconstellation.com

Cấu hình các lớp bên trong Entity Framework

Code First xây dựng mô hình khái niệm từ các lớp thực thể của bạn bằng cách sử dụng những quy mong mặc định.

EF 6 Code First tận dụng một mẫu lập trình được gọi là quy cầu về cấu hình. Mặc dù nhiên, bạn cũng có thể ghi đè các quy cầu này bằng cách cấu hình các lớp thực thể của chúng ta để cung ứng cho EF thông tin cần thiết.

Có hai phương pháp để cấu hình những lớp thực thể của bạn:

Attribute chú giải dữ liệu.Fluent API.

Attribute chú thích dữ liệu

Chú thích hợp dữ liệu là một cấu hình dựa bên trên attribute đơn giản, bạn có thể áp dụng cho những lớp và thuộc tính của nó.

Các attribute này sẽ không chỉ giành riêng cho EF mà còn được thực hiện trong ASP.NET web Form với ASP.NET MVC. Bởi vì đó, bọn chúng được để trong một namespace riêng lẻ là System.ComponentModel.DataAnnotations.

Ví dụ sau đây minh họa việc sử dụng một số attribute ghi chú dữ liệu:

public class Student public Student() public int SID get; set; public string StudentName get; set; public int? Age get; set; public int StdId get; set; public virtual Standard Standard get; set; Lưu ý: Attribute chú thích dữ liệu không cung ứng tất cả những tùy chọn cấu hình cho Entity Framework. Bởi vậy, bạn có thể sử dụng Fluent API, nó cung cấp tất cả những tùy chọn thông số kỹ thuật cho EF.Tìm hiểu chi tiết về attribute chú thích tài liệu trong Entity Framework tại nội dung bài viết này:

Trung Nguyennasaconstellation.com

Fluent API

Một cách khác nhằm định cấu hình các lớp là bằng phương pháp sử dụng Entity Framework Fluent API. Fluent API dựa vào mẫu thi công Fluent API (hay còn gọi là giao diện thông thạo) vào đó công dụng được tạo nên thành xuất phát từ một chuỗi phương thức.

Cấu hình Fluent API hoàn toàn có thể được áp dụng khi EF xây dựng quy mô từ những lớp thực thể của bạn. Bạn có thể thêm các thông số kỹ thuật Fluent API bằng cách ghi đè cách thức OnModelCreating của lớp DbContext trong Entity Framework 6.x, như được trình diễn bên dưới:

public class SchoolDBContext: DbContext public SchoolDBContext(): base("SchoolDBConnectionString") public DbSet Students get; set; public DbSet Standards get; set; public DbSet StudentAddress get; set; protected override void OnModelCreating(DbModelBuilder modelBuilder) //Configure domain classes using modelBuilder here.. Bạn rất có thể sử dụng tham số modelBuilder, một đối tượng của lớp DbModelBuilder để thông số kỹ thuật các lớp thực thể của bạn. DbModelBuilder được call là Fluent API vì chúng ta cũng có thể gọi những phương thức khác biệt trong một chuỗi phương thức.

Tìm hiểu chi tiết về Fluent API vào Entity Framework tại bài viết này:

Cấu hình quan hệ trong Code First

Trong cơ sở tài liệu quan hệ, một mọt quan hệ là một liên kết mãi sau giữa những bảng của cơ sở tài liệu quan hệ trải qua các khóa ngoại.

Khóa nước ngoài (Foreign Key) là một trong những cột hoặc tổ hợp các cột được thực hiện để tùy chỉnh thiết lập và tiến hành một link giữa tài liệu trong nhì bảng.

Có ba loại mối quan hệ giữa những bảng và chúng khác nhau tùy ở trong vào cách định nghĩa các cột liên quan.

Mối quan hệ tình dục một-nhiềuMối tình dục nhiều-nhiềuMối quan hệ tình dục một-một

Để hiểu rõ cách cấu hình các quan hệ giữa các thực thể trong Entity Framwork Code First chúng ta cũng có thể xem bài bác viết:

Migration trong Code First

Entity Framework Code First có các chiến lược khởi tạo cơ sở dữ liệu khác nhau như CreateDatabaseIfNotExists, DropCreateDatabaseIfModelChanges, và DropCreateDatabaseAlways.

Tuy nhiên, có một vài vấn đề với những chiến lược này, ví dụ: nếu bạn đã có dữ liệu (trừ seed data - dữ liệu lúc đầu được thêm bởi code) hoặc stored procedures, triggers, v.v. Vào cơ sở dữ liệu của bạn.

Các chiến lược này được thực hiện để các loại bỏ tổng thể cơ sở tài liệu và sinh sản lại nó, vị đó các bạn sẽ mất tài liệu và các đối tượng người dùng DB khác.

Có hai các loại Migration:

Migration từ động.Migration dựa trên mã.

Để làm rõ về hai loại Migration trong Code First bạn có thể tham khảo bài viết sau:

Tạo Context và lớp thực thể từ database vào Code First

Ở phần này, các bạn sẽ tìm hiểu biện pháp tạo Context và các lớp thực thể từ bỏ cơ sở dữ liệu có sẵn, sử dụng phương thức tiếp cận Code First.

Entity Framework cung ứng một cách đơn giản dễ dàng để thực hiện Code First cho cơ sở tài liệu có sẵn. Nó sẽ khởi tạo các lớp thực thể cho tất cả các bảng cùng view trong cơ sở dữ liệu hiện tại của công ty và thông số kỹ thuật chúng với những attribute chú thích tài liệu và Fluent API.

Để áp dụng Code First mang đến cơ sở tài liệu có sẵn, nhấp chuột phải vào dự án của khách hàng trong Visual Studio -> add -> New Item..


Chọn ADO.NET Entity Data mã sản phẩm trong hộp thoại Add New Item với đặt tên cho quy mô (đây sẽ là tên gọi lớp Context) rồi nhấp vào nút Add.


Điều này vẫn mở trình khuyên bảo Entity Data mã sản phẩm như bên dưới đây. Chọn Code First from database với nhấn Next.


Bây giờ, chọn liên kết dữ liệu đến cơ sở dữ liệu hiện có. Tạo liên kết mới cho cửa hàng dữ liệu của doanh nghiệp nếu danh sách thả xuống không bao gồm kết nối đến đại lý dữ liệu hiện tại của bạn. Dìm Next nhằm tiếp tục.


Điều này sẽ tạo nên ra tất cả các lớp thực thể cho các bảng và view trong cơ sở dữ liệu của bạn như được hiển thị mặt dưới.


Nó cũng biến thành tạo lớp Context sau áp dụng Fluent API để cấu hình các lớp thực thể theo cơ sở tài liệu của bạn.

namespace EFDemo using System; using System.Data.Entity; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; public partial class SchoolContext : DbContext public SchoolContext() : base("name=SchoolContext2") public virtual DbSet Courses get; set; public virtual DbSet Standards get; set; public virtual DbSet Students get; set; public virtual DbSet StudentAddresses get; set; public virtual DbSet Teachers get; set; public virtual DbSet View_StudentCourse get; set; protected override void OnModelCreating(DbModelBuilder modelBuilder) modelBuilder.Entity() .Property(e => e.CourseName) .IsUnicode(false); modelBuilder.Entity() .HasMany(e => e.Students) .WithMany(e => e.Courses) .Map(m => m.ToTable("StudentCourse").MapLeftKey("CourseId").MapRightKey("StudentId")); modelBuilder.Entity() .Property(e => e.StandardName) .IsUnicode(false); modelBuilder.Entity() .Property(e => e.Description) .IsUnicode(false); modelBuilder.Entity() .HasMany(e => e.Students) .WithOptional(e => e.Standard) .WillCascadeOnDelete(); modelBuilder.Entity() .HasMany(e => e.Teachers) .WithOptional(e => e.Standard) .WillCascadeOnDelete(); modelBuilder.Entity() .Property(e => e.StudentName) .IsUnicode(false); modelBuilder.Entity() .Property(e => e.RowVersion) .IsFixedLength(); modelBuilder.Entity() .HasOptional(e => e.StudentAddress) .WithRequired(e => e.Student) .WillCascadeOnDelete(); modelBuilder.Entity() .Property(e => e.Address1) .IsUnicode(false); modelBuilder.Entity() .Property(e => e.Address2) .IsUnicode(false); modelBuilder.Entity() .Property(e => e.City) .IsUnicode(false); modelBuilder.Entity() .Property(e => e.State) .IsUnicode(false); modelBuilder.Entity() .Property(e => e.TeacherName) .IsUnicode(false); modelBuilder.Entity() .HasMany(e => e.Courses) .WithOptional(e => e.Teacher) .WillCascadeOnDelete(); modelBuilder.Entity() .Property(e => e.StudentName) .IsUnicode(false); modelBuilder.Entity() .Property(e => e.CourseName) .IsUnicode(false);

Cascade Delete trong Code First

Cascade Delete sẽ auto xóa các bạn dạng ghi dựa vào hoặc cấu hình thiết lập các cột khóa ngoài thành phố null khi phiên bản ghi phụ thân bị xóa trong các đại lý dữ liệu.

Cascade Delete được nhảy theo mang định trong Entity Framework cho toàn bộ các nhiều loại mối quan liêu hệ, chẳng hạn như một-một, một-nhiều và nhiều-nhiều.

Cascade Delete trong mối quan hệ một-một

Hãy xem lấy một ví dụ sau đây: những thực thể Student và StudentAddress có quan hệ một-một.

public class Student public int StudentId get; set; public string StudentName get; set; public virtual StudentAddress Address get; set; public class StudentAddress public int StudentAddressId get; set; public string Address1 get; set; public string Address2 get; set; public string city get; set; public int Zipcode get; set; public string State get; set; public string Country get; set; public virtual Student Student get; set; Ví dụ sau đây minh họa cascade delete.

using (var ctx = new SchoolContext()) var stud = new Student() StudentName = "James" ; var địa chỉ = new StudentAddress() Address1 = "address" ; stud.Address = add; ctx.Students.Add(stud); ctx.SaveChanges(); ctx.Students.Remove(stud);// student & its address will be removed from db ctx.SaveChanges();Trong ví dụ như trên, trước tiên EF lưu đối tượng người dùng stud của thực thể Student và đối tượng địa chỉ của thực thể StudentAddress của nó vào cửa hàng dữ liệu.

Sau đó, lúc xóa đối tượng người dùng stud với gọi cách tiến hành SaveChanges(), EF vẫn xóa stud cũng như bạn dạng ghi khớp ứng của nó vào bảng StudentAddresses.

Do đó, EF cho phép cascade delete theo khoác định.

Cascade Delete trong quan hệ một-nhiều

Hãy xem lấy một ví dụ sau đây: những thực thể Student cùng Standard có quan hệ một-nhiều.

public class Student public int StudentId get; set; public string StudentName get; set; public virtual Standard Standard get; set; public class Standard public Standard() Students = new List(); public int StandardId get; set; public string description get; set; public virtual ICollection Students get; set; Ví dụ tiếp sau đây minh họa cascade delete giữa các thực thể có mối quan hệ một-nhiều:

using (var ctx = new SchoolContext()) var student1 = new Student() StudentName = "James" ; var student2 = new Student() StudentName = "Gandhi" ; var standard1 = new Standard() StandardName = "Standard 1" ; student1.Standard = standard1; student2.Standard = standard1; ctx.Students.Add(student1); ctx.Students.Add(student2); //inserts students & standard1 into db ctx.SaveChanges(); //deletes standard1 from db và also phối standard_StandardId FK column in Students table to lớn null for // all the students that reference standard1. Ctx.Standards.Remove(standard1); ctx.SaveChanges();Trong lấy ví dụ trên, EF xóa đối tượng người dùng standard1 khỏi cơ sở dữ liệu và nó cũng tùy chỉnh thiết lập cột khóa nước ngoài standard_StandardId trong bảng Students thành null cho toàn bộ các bản ghi tham chiếu đối tượng người tiêu dùng standard1.

Lưu ý: EF tự động hóa xóa các bạn dạng ghi liên quan trong bảng sống giữa cho những thực thể có quan hệ nhiều-nhiều trường hợp một thực thể bị xóa.

Do đó, EF cho phép cascade delete khoác định cho tất cả các thực thể.

Tắt Cascade Delete

Sử dụng Fluent API để thông số kỹ thuật tắt cascade delete cho những thực thể để bằng phương thức WillCascadeOnDelete(), như ví dụ mặt dưới.

public class SchoolContext Students get; set; public DbSet Standards get; set; protected override void OnModelCreating(DbModelBuilder modelBuilder) modelBuilder.Entity() .HasOptional(s => s.Standard) .WithMany() .WillCascadeOnDelete(false); }Lưu ý: không tồn tại attribute chú thích dữ liệu nào bao gồm sẵn nhằm tắt cascade delete.

Sử dụng Stored Procedures trong Code First

Entity Framework 6 Code First hỗ trợ khả năng tạo và sử dụng stored procedure để thực hiện các làm việc thêm, cập nhật và xóa lúc gọi cách làm SaveChanges().

Chúng ta hãy sử dụng các stored procedure mang lại các thao tác làm việc CUD (Create, Update, Delete) đến thực thể Student sau.

class Student public int StudentId get; set; public string StudentName get; set; public DateTime DoB get; set; Sử dụng phương thức MapToStoredProcedures() để ánh xạ một thực thể với những stored procedure mang định (các stored procedure mặc định này sẽ được tạo bởi vì EF API). Lấy ví dụ như sau ánh xạ thực thể Student với những stored procedure khoác định.

Xem thêm: Memcached Là Gì? Và Hướng Dẫn Cài Đặt Memcache Và Php

public class SchoolContext: DbContext protected override void OnModelCreating(DbModelBuilder modelBuilder) modelBuilder.Entity() .MapToStoredProcedures(); public DbSet Students get; set; EF API sẽ tạo nên ra bố stored procedure Student_Insert, Student_Update với Student_Delete cho thực thể Student sống trên, như hình dưới đây.