【问题标题】:Save list to database entity framework将列表保存到数据库实体框架
【发布时间】:2016-03-17 13:31:39
【问题描述】:

我有以下代码:

 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 保存到数据库中。但是,我收到以下错误消息:

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

【问题讨论】:

  • 您正在尝试添加指定类的新列表(值是列表)而不是特定实例
  • @apomene:嗯,好的,那我该怎么做呢?

标签: c# asp.net asp.net-mvc entity-framework


【解决方案1】:

您正在尝试使用 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是查询语言,不是修改语言。

【讨论】:

  • @Bryan 这是最好的选择,通过使用 linq foreach 你实际上并没有获得任何东西
  • 您好,像您这样操作时,我仍然遇到同样的错误。
  • @Bryan value 的类型是 UOSChangeLog 对吧?你能复制错误信息吗?
  • 在这里您可以在值列表的值上找到打印屏幕:postimg.org/image/56uxs9yzb,在这里您可以找到错误消息:postimg.org/image/4felk4dir
  • @Bryan 他们属于不同的类型。您的值来自 Contracts.DataContracts 命名空间,而您的 objectcontext 是 Strada.DataReview... 命名空间。您必须创建正确的对象来添加它(Strada 命名空间)。
【解决方案2】:

请使用addrange方法。

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

【讨论】:

    【解决方案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;
            }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2013-01-06
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多