10

OK, đây có thể là câu hỏi mới, nhưng làm cách nào/ở đâu tôi có thể đăng ký sự kiện ObjectContext.SavingChanges như được đề cập trong ví dụ này post.Mã EF Đầu tiên: Tôi có thể tìm sự kiện SavingChanges ở đâu?

Tôi đã chỉ có hai lớp học có liên quan trong ứng dụng demo của tôi: Các "Quốc gia" lớp và một lớp học mà giữ "định nghĩa" EF Mã đầu tiên:

internal class TestDb : DbContext 
{ 
    public DbSet<Country> Countries { get; set; }  
} 

Bất kỳ gợi ý được đánh giá cao.

Trả lời

10

Bạn sẽ có thể làm điều này:

internal class TestDb : DbContext 
{ 
    public void SetSavingChanges(EventHandler evt) 
    { 
      var oc = this as IObjectContextAdapter; 
      oc.ObjectContext.SavingChanges -= evt; 
      oc.ObjectContext.SavingChanges += evt; 
    } 

    public DbSet<Country> Countries { get; set; } 
} 
+1

Không hiểu đầy đủ cú pháp của bạn, nhưng hiệu trưởng có vẻ như cách tốt nhất cho tôi. Câu hỏi thực sự là nếu có một cách tốt hơn bằng cách sử dụng EF 4.1. –

+0

@SanderRijken - Bạn không hiểu cú pháp nào? Nó khá thẳng về phía trước. DbContext thực hiện giao diện 'IObjectContextAdapter', có một thuộc tính được gọi là ObjectContext trên nó. Bạn đưa 'this' vào adapter, sau đó sử dụng thuộc tính ObjectContext để thiết lập sự kiện. –

+1

'(sự kiện evt)'. Tôi có lẽ sẽ phơi bày sự kiện này là 'sự kiện công cộng EventHandler SavingChanges {add {((IObjectContextAdapter) this) .ObjectContext.SavingChanges + = value; } remove {((IObjectContextAdapater) this) .ObjectContext.SavingChanges - = giá trị; }} ' –

2

Từ những gì tôi có thể thấy trên MSDN, DbContext bao bọc một thể hiện của ObjectContext làm mặt tiền, không để lộ sự kiện cụ thể này.

Tuy nhiên, DbContext không có một constructor overload mà phải mất một ObjectContext - bạn có thể sử dụng để vượt qua trong một ObjectContext và đăng ký các sự kiện SavingChanges trên đó.

using(ObjectContext context = new ObjectContext(myConnectionString)) 
{ 
    using(DbContext dbContext = new DbContext(context, true)) 
    { 

    } 
} 
0

Một cách khác có thể, ví dụ:

Public Class MainForm 

    Private WithEvents myObjectContext As ObjectContext 
    Private myDbContext As DbContext 

... 

    Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles Me.Load 
    myDbContext = New DbContext 
    myObjectContext = CType(myDbContext, IObjectContextAdapter).ObjectContext 

... 


    Private Sub ObjectContextSavingChanges(sender As Object, e As EventArgs) Handles myObjectContext.SavingChanges 

    'Your code hear 

    End Sub 
Các vấn đề liên quan