2010-09-14 59 views
0

这里有一个问题:我有以下实体: alt textC#ADO.NET实体

我每次更新或插入一个交易,我想自动检测依赖于ReferenceMappingExpressionDescriptionMapppingExpressionCategoryMappings实体类别。

我的意思是,我想匹配Transaction.DescriptionCategoryMappings.DescriptionMapping,如果匹配则从CategoryMapping获得FkCategoryID并保存事务。

有可能循环遍历list和categorymapping列表中的每个事务,但我不认为它是个好主意。你会如何做到这一点?有什么建议么?有什么经验?

回答

1

您可以使用ObjectStateManager,为您的实体环境添加部分OnContextCreated方法。向Context的SavingChanges事件添加新的处理程序。获取所有添加和修改的交易,并在其中执行任何您想要的操作。像这样:

public partial class ModelContainer 
{ 
    partial void OnContextCreated() 
    { 
     this.SavingChanges += new EventHandler(ModelContainer_SavingChanges); 
    } 

    void ModelContainer_SavingChanges(object sender, EventArgs e) 
    { 
     foreach (var item in this.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Added)) 
     { 
      SetTransactionDescription(item); 
     } 
     foreach (var item in this.ObjectStateManager.GetObjectStateEntries(System.Data.EntityState.Modified)) 
     { 
      SetTransactionDescription(item); 
     } 
    } 

    void SetTransactionDescription(System.Data.Objects.ObjectStateEntry entry) 
    { 
     Transaction transaction = entry.Entity as Transaction; 
     if (transaction != null) 
     { 
      // Your code 
     } 
    } 
}