Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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#_Entity Framework_.net 4.0 - Fatal编程技术网

C# 阅读->;消费->;更新

C# 阅读->;消费->;更新,c#,entity-framework,.net-4.0,C#,Entity Framework,.net 4.0,我正在使用生产者-多消费者模式 数据库中已有记录 生产者读取记录并将其放入线程安全队列 使用者线程逐个处理记录并向其中添加更多数据 现在生产者必须用消费者提供的新数据更新数据库中的记录 我是实体框架的新手,不知道使用什么方法来正确更新这些记录 我已经读到,我可以从数据库中选择一个记录列表,直接编辑字段,然后在上下文对象上调用SaveChanges。但我怀疑一些消费者会在编辑列表中的一些属性中间。 < P>试试这个。第一个示例显示如何更新单个记录,第二个示例显示如何使用记录列表进行更新。您可以从列

我正在使用生产者-多消费者模式

数据库中已有记录

  • 生产者读取记录并将其放入线程安全队列
  • 使用者线程逐个处理记录并向其中添加更多数据
  • 现在生产者必须用消费者提供的新数据更新数据库中的记录 我是实体框架的新手,不知道使用什么方法来正确更新这些记录


    我已经读到,我可以从数据库中选择一个记录列表,直接编辑字段,然后在上下文对象上调用
    SaveChanges
    。但我怀疑一些消费者会在编辑列表中的一些属性中间。

    < P>试试这个。第一个示例显示如何更新单个记录,第二个示例显示如何使用记录列表进行更新。您可以从列表中的任何对象添加或删除所需的数据,只要这些数据属于数据模型中的类型即可。然后调用数据库上下文并遍历列表中的每个对象。使用SaveChanges()更新数据库

    公共列表MyCustomers{get;set;}
    公众客户()
    {
    使用(var context=new salesscontext())
    {
    var customers=来自上下文中的b.customers
    选择b;
    MyCustomers=customers.ToList();
    }
    }
    更改密码()的公共无效方法
    {
    }
    public void UpdateDatabase()
    {
    使用(var context=new salesscontext())
    {
    foreach(MyCustomers中的var人员)
    {
    context.Customers.Add(person);
    }
    SaveChanges();
    }
    }
    
    谢谢!但是,你好像没读我的问题。。。我想读取队列中的一些记录,让使用者向其中添加数据,然后将其更新回数据库。当您说队列时,您指的是从数据库拉入IEnumerable的对象吗?是的,正确。拉入enumerable,然后通过调用ToList()转换为List为什么消费者不能更新数据库?可以吗?我不确定从myltiple线程用相同的上下文更新db是否好。阅读EF文档。。我希望在这种情况下能迅速得到最佳实践的建议。
        public List<Customer> MyCustomers { get; set; }
    
        public void GetCustomers()
        {
            using(var context = new SalesContext())
            {
                var customers = from b in context.Customers
                                select b;
    
                MyCustomers = customers.ToList<Customer>();
            }
        }
    
        public void MethodThatChangesCustomers()
        {
    
        }
    
        public void UpdateDatabase()
        {
            using(var context = new SalesContext())
            {
                foreach (var person in MyCustomers)
                {
                    context.Customers.Add(person);
                }
                context.SaveChanges();
            }
        }