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

时间:2016-03-17 13:31:40

标签: 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(u => { u.Username = user; u.Changed = DateTime.Now; });
                var test = ctx.UOSChangeLog.Add(values);
                ctx.SaveChanges();
                return true;
            }
        }

我想要做的是将values保存到数据库中。但是,我收到以下错误消息:

enter image description here

这是我的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; }

这是我的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; }
    }

3 个答案:

答案 0 :(得分:3)

您可以使用Entity Framework的.AddRange方法向Db添加对象集合。

MSDN

看起来像:

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

答案 1 :(得分:2)

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

Add

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

答案 2 :(得分:0)

请使用addrange方法。

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