EF 6 - DBEntityEntry

Lớp DBEntityEntry 

DBEntityEntry là một lớp quan trọng, nó là hữu ích trong việc nhận những thông tin khác nhau về một thực thể. Bạn có thể nhận một thể hiện của DBEntityEntry của một thực thể riêng biệt bằng cách sử dụng phương thức Entry của DBContext.

VD: DBEntityEntry studentEntry = dbcontext.Entry(StudentEntity);

DBEntityEntry cho phép bạn truy cập trạng thái thực thể, giá trị hiện thời và nguyên bản của tất cả thuộc tính của thực thể đưa ra. Đoạn mã sau trình bày làm thế nào để nhận thông tin quan trọng của thực thể riêng biệt.

using (var dbCtx = new SchoolDBEntities())
{
    //get student whose StudentId is 1
    var student = dbCtx.Students.Find(1);

    //edit student name
    student.StudentName = "Edited name";

    //get DbEntityEntry object for student entity object
    var entry = dbCtx.Entry(student);

    //get entity information e.g. full name
    Console.WriteLine("Entity Name: {0}", entry.Entity.GetType().FullName);

    //get current EntityState
    Console.WriteLine("Entity State: {0}", entry.State );

    Console.WriteLine("********Property Values********");

    foreach (var propertyName in entry.CurrentValues.PropertyNames )
    {
        Console.WriteLine("Property Name: {0}", propertyName);

        //get original value
        var orgVal = entry.OriginalValues[propertyName];
        Console.WriteLine("     Original Value: {0}", orgVal);
                    
        //get current values
        var curVal = entry.CurrentValues[propertyName];
        Console.WriteLine("     Current Value: {0}", curVal);
    }

}

Kết quả:

Entity Name: Student
Entity State: Modified
********Property Values********
Property Name: StudentID
Original Value: 1
Current Value: 1
Property Name: StudentName
Original Value: First Student Name
Current Value: Edited name
Property Name: StandardId
Original Value:
Current Value:

DbEntityEntry cho phép bạn cài Added, Modified hoặc Deleted EntityState tới một thực thể như bên dưới:

context.Entry(student).State = System.Data.Entity.EntityState.Modified;

Lớp DBEntityEntry có những phương thức quan trọng sau:

Tên phương thức Kiểu trả về Mô tả
Collection DBCollectionEntry Nhận một đối tượng thể hiện tập hợp thuộc tính điều hướng từ thực thể này tới tập hợp của những thực thể liên quan.

 

VD:
var studentDBEntityEntry = dbContext.Entry(studentEntity);
var collectionProperty = studentDBEntityEntry.Collection<course>(s => s.Courses);

ComplexProperty DBComplexPropertyEntry Nhận một đối tượng thể hiện thuộc tính phức tạp của một thực thể.

 

VD:
var studentDBEntityEntry = dbContext.Entry(studentEntity);
var complexProperty = studentDBEntityEntry.ComplexProperty(stud.StudentStandard);

GetDatabaseValues DBPropertyValues Những truy vấn CSDL cho việc sao chép dữ liệu của những thực thể được theo dõi cũng như chúng hiện đang tồn tại trong CSDL. Thay đổi những giá trị trong mảng trả về sẽ không cập nhật những giá trị trong CSDL. Nếu thực thể là không được tìm thấy trong CSDL thì nó sẽ trả về null.

 

VD:
var studentDBEntityEntry = dbContext.Entry(studentEntity);
var dbPropValues = studentDBEntityEntry.GetDatabaseValues();

Property DBPropertyEntry Nhận một đối tượng thể hiện một thuộc tính scalar hoặc phức tạp của thực thể này.

 

VD:
var studentDBEntityEntry = dbContext.Entry(studentEntity);
string propertyName = studentDBEntityEntry.Property(“StudentName”).Name;

Reference DBReferenceEntry Nhận một đối tượng thể hiện thuộc tính điều hướng tham chiếu từ thực thể này tới thực thể khác.

 

VD:
var studentDBEntityEntry = dbContext.Entry(studentEntity);
var referenceProperty = studentDBEntityEntry.Reference(s => s.Standard);

Reload void Tải lại thực thể từ CSDL ghi đè bất kỳ giá trị thuộc tính nào với những giá trị từ CSDL. Thực thể này sẽ ở trong trạng thái Unchanged sau khi gọi phương thức này.

 

VD:
var studentDBEntityEntry = dbContext.Entry(studentEntity);
studentDBEntityEntry.Reload();

Visit MSDN for more information on DBEntityEntry class.