简体   繁体   English

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

[英]Save list to database entity framework

I have the following code: 我有以下代码:

 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;
            }
        }

The thing I want to do Is to save values to the database. 我想要做的是将values保存到数据库中。 However, I get a the following error message: 但是,我收到以下错误消息:

在此输入图像描述

Here is my Contracts.DataContracts.UOSChangeLog: 这是我的Contracts.DataContracts.UOSChangeLog:

   public int? Id { get; set; }
        public int Accident_nr { get; set; }
        public int Refnr { get; set; }
        public int Action { get; set; }
        public string Old_data { get; set; }
        public string New_data { get; set; }
        public DateTime SearchedFromDate { get; set; }
        public DateTime SearchedToDate { get; set; }
        public DateTime Changed { get; set; }
        public string Username { get; set; }
        public string Comment { get; set; }

And here Is my Services.StradaDataReview2Model.UOSChangeLog that are used as a DbSet 这是我的Services.StradaDataReview2Model.UOSChangeLog用作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; }
    }

You're trying to add a list with the Add method which takes a single object, just keep it simple and use a foreach: 您正在尝试使用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;
}

Just use a simple foreach, linq is a querying language, not a modifying language. 只需使用一个简单的foreach,linq是一种查询语言,而不是一种修改语言。

You can use Entity Framework's .AddRange method to add a collection of objects to your Db. 您可以使用Entity Framework的.AddRange方法向Db添加对象集合。

MSDN MSDN

It will look like: 它看起来像:

       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;
        }

Please use addrange method. 请使用addrange方法。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM