Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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#_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 将列表保存到数据库实体框架

C# 将列表保存到数据库实体框架,c#,asp.net,asp.net-mvc,entity-framework,C#,Asp.net,Asp.net Mvc,Entity Framework,我有以下代码: internal static bool SaveUOSChangeLog(List<Contracts.DataContracts.UOSChangeLog> values, string user) { try { using(var ctx = new StradaDataReviewContext2()) { values.ForEach(

我有以下代码:

 internal static bool SaveUOSChangeLog(List<Contracts.DataContracts.UOSChangeLog> values, string user)
    {
        try
        {
            using(var ctx = new StradaDataReviewContext2())
            {
                values.ForEach(u => { u.Username = user; u.Changed = DateTime.Now; });
                var test = ctx.UOSChangeLog.Add(values);
                ctx.SaveChanges();
                return true;
            }
        }
这是我的Services.StradaDataReview2Model.uoshangelog,用作
DbSet

[Table("UOSChangeLog")]
    public partial class UOSChangeLog
    {
        [Required]
        public int? Id { get; set; }

        public int Accident_nr { get; set; }
        [Required]
        public int Refnr { get; set; }
        [Required]
        public int Action { get; set; }
        [Required]
        public string Old_data { get; set; }
        [Required]
        public string New_data { get; set; }
        [Required]
        public DateTime SearchedFromDate { get; set; }
        [Required]
        public DateTime SearchedToDate { get; set; }
        [Required]
        public DateTime Changed { get; set; }
        [Required]
        public string Username { get; set; }
        [Required]
        public string Comment { get; set; }
    }

您试图使用
add
方法添加一个列表,该方法只需要一个对象,只需保持简单并使用foreach:

using(var ctx = new StradaDataReviewContext2())
{
   foreach(var value in values)
   {
       value.Username = user;
       value.Changed = DateTime.Now;
       ctx.UOSChangeLog.Add(value);
   }
   ctx.SaveChanges();
   return true;
}

只需使用一个简单的foreach,linq是一种查询语言,而不是修改语言。

您可以使用Entity Framework的.AddRange方法将对象集合添加到数据库中

它看起来像:

       using(var ctx = new StradaDataReviewContext2())
        {
            values.ForEach(u => { u.Username = user; u.Changed = DateTime.Now; });
            var test = ctx.UOSChangeLog.AddRange(values);
            ctx.SaveChanges();
            return true;
        }

请使用addrange方法

db.TheTable.AddRange(TheList)
db.SaveChanges();

您正在尝试添加指定类的新列表(值是一个列表),而不是特定类的列表instance@apomene:嗯,好吧,那我该怎么做?@Bryan这是最好的选择,使用linq foreach你实际上不会再得到任何东西了,当我像你那样做的时候,我仍然会遇到同样的错误。@Bryan
value
属于
uoschengelog
类型,对吗?你能复制错误信息吗?在这里你可以在值列表的值上找到一个打印屏幕:在这里你可以找到错误信息:@Bryan他们是不同类型的。您的值来自
Contracts.DataContracts
命名空间,而您的objectcontext是
Strada.DataReview…
命名空间。您必须创建正确的对象来添加它(属于
Strada
名称空间)。但我还是遇到了我问题中描述的相同错误。愚蠢的问题:你的上下文确实继承了DbContext,对吗?@DanOrlovsky如果我调用List.Clear(),在AddRange之后,db还会有数据吗?@Austin_Anderson-只要你保存更改,你就可以了。
db.TheTable.AddRange(TheList)
db.SaveChanges();