2015-05-15 100 views
0
 var school = new Models.School(); 

     SchoolCommandToSchool.Map(school, model); 

     _schoolRepository.Add(school); 

     _unitOfWork.SaveChanges(); 

     school.Code // is null 

插入後,我在觸發器中生成一個學校代碼並存儲在代碼列中。但保存更改後,我得到一個null。保存更改後由觸發器生成的訪問值

如果我在插入觸發器中寫入數據,實體不知道從列中獲取數據?

有人能解釋發生了什麼?

+0

我相信EF不能識別插入觸發器內的腳本。你在觸發器中做什麼?也許我們可以使用其他方法... –

+0

我基於其他一些數據(來自數據庫)生成該代碼,然後檢查生成的代碼是否已經存在(在數據庫中)。修改相當多的工作。 –

回答

0

您可以使用changeTracker來跟蹤對象中的更改。就像這樣:

裏面你的DbContext類(未測試的代碼):

public override int SaveChanges() { 
    //detect the changes 
    this.ChangeTracker.DetectChanges(); 
    //get the schools object, if it exists 
    //you also can check if the object is being insert or updated 
    // i => i.State == EntityState.Modified or EntityState.Added 
    var entries = this.ChangeTracker.Entries().Where(i => i.Entity.GetType() == typeof(School); 

    if (entries.Any()) 
    { 
     foreach (var entry in entries) { 
      //do the trigger job in entry object; 
     } 
    } 


    return base.SaveChanges(); 
} 

每次你改變一個學校,你運行一個額外的代碼。

相關問題