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();