Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#ADO.NET实体_C#_.net_Entity Framework - Fatal编程技术网

C#ADO.NET实体

C#ADO.NET实体,c#,.net,entity-framework,C#,.net,Entity Framework,问题是:我有以下实体: 每次更新或插入事务时,我都希望根据CategoryMappings实体中的ReferenceMappingExpression或descriptionmappingexpression自动检测类别 我的意思是,我想将Transaction.Description与CategoryMapping.DescriptionMapping匹配,如果匹配,则从CategoryMapping中获取FkCategoryID,并保存事务 可以循环查看列表和categorymapping

问题是:我有以下实体:

每次更新或插入事务时,我都希望根据
CategoryMappings
实体中的
ReferenceMappingExpression
descriptionmappingexpression
自动检测类别

我的意思是,我想将
Transaction.Description
CategoryMapping.DescriptionMapping
匹配,如果匹配,则从
CategoryMapping
中获取
FkCategoryID
,并保存事务


可以循环查看列表和
categorymapping
list中的每个事务,但我认为这不是个好主意。你会怎么做?有什么建议吗?有没有这样的经验?

您可以使用ObjectStateManager,将部分OnContextCreated方法添加到实体上下文中。将新处理程序添加到上下文的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
        }
    }
}