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# 每个请求的上下文:如何更新实体_C#_.net_Entity Framework_Design Patterns_Domain Driven Design - Fatal编程技术网

C# 每个请求的上下文:如何更新实体

C# 每个请求的上下文:如何更新实体,c#,.net,entity-framework,design-patterns,domain-driven-design,C#,.net,Entity Framework,Design Patterns,Domain Driven Design,我有一个存储库类,如下所示。有一个获取实体对象的方法–GetPaymentByID。我正在检索付款对象并更改其PaymentType属性。但这并没有反映在数据库中。我知道原因——SaveContextChanges方法使用了新的上下文 我需要对每个请求使用上下文方法。因此,我在每个方法中创建新的上下文 在这种情况下,如何修改代码以成功更新数据库 注意:客户端程序不应使用ObjectContext,因为可以使用另一个不使用Entity Framework的存储库更改存储库 注意:“DataCont

我有一个存储库类,如下所示。有一个获取实体对象的方法–GetPaymentByID。我正在检索付款对象并更改其PaymentType属性。但这并没有反映在数据库中。我知道原因——SaveContextChanges方法使用了新的上下文

我需要对每个请求使用上下文方法。因此,我在每个方法中创建新的上下文

在这种情况下,如何修改代码以成功更新数据库

注意:客户端程序不应使用ObjectContext,因为可以使用另一个不使用Entity Framework的存储库更改存储库

注意:“DataContext是轻量级的,创建起来并不昂贵”

阅读

  • 添加/附加和实体状态:

  • 您需要将对象添加(如果数据是新的)或附加(如果数据已编辑)到上下文:

    大致如下:

    public void SaveContextChanges(MyEntityDataModelEDM.Payment paymentEntity)
    {
        using (var myObjectContext = new MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal))
        {
            // use your own logic for determining a "new" entity
            myObjectContext.Entry(paymentEntity).State = 
                    (paymentEntity.PaymentID == default(int)) ?  
                                   EntityState.Added :
                                   EntityState.Modified;
    
            myObjectContext.SaveChanges();
        }
    }
    

    请参阅行new MyEntityDataModelEDM.LibraryReservationSystemEntities()。我在这里创造一个新的环境,不是吗?此上下文如何知道在以前的上下文对象中所做的更改?将状态设置为
    Modified
    会告诉上下文实体已修改,应在数据库中更新。物体从哪里来并不重要。我在这种方法中遇到了错误。请看
            MyRepository.MyPaymentRepository rep = new MyRepository.MyPaymentRepository();
    
            MyEntityDataModelEDM.Payment p2= rep.GetPaymentByID(1);
            p2.PaymentType = "TeSSS";
            rep.SaveContextChanges(p2);
    
    public void SaveContextChanges(MyEntityDataModelEDM.Payment paymentEntity)
    {
        using (var myObjectContext = new MyEntityDataModelEDM.LibraryReservationSystemEntities(connectionStringVal))
        {
            // use your own logic for determining a "new" entity
            myObjectContext.Entry(paymentEntity).State = 
                    (paymentEntity.PaymentID == default(int)) ?  
                                   EntityState.Added :
                                   EntityState.Modified;
    
            myObjectContext.SaveChanges();
        }
    }