朋友们,我有以下列表
List<Authors>listAuthor=new List<Authors>();
在该列表中我有100条记录,现在我的问题是我想将这些列表保存到数据库中只使用实体框架中的数据库优先技术在Asp.Net MVc中进行一次往返(只有一次命中数据库)
我创建了对象
Author objAuthor=new Author();
objAuthor=listAuthor;
我收到转换错误,有什么想法的朋友吗?
这是我的完整代码
public ActionResult SaveAuthorConsol()
{
List<Author> listAuthor = new List<Author>(); // declare list
List<Bib> bib = new List<Bib>(); // geting records from this table
bib = db.Bibs.ToList();
var q = db.Authors.ToList();
foreach (var c in q)
{
db.Authors.DeleteObject(c); //Note:deleting previous records from Author table
}
db.SaveChanges();
foreach (var bibitems in bib) // return Author type list
{
Authors objAuthor = new Authors();
listAuthor.AddRange(objAuthor.SaveAouthor(0, bibitems.Contents));
}
foreach (Author objauthor in listAuthor) //adding my list records to database
{
db.Authors.Attach(objauthor); // getting error here
}
db.SaveChanges();
return View();
}
由于
答案 0 :(得分:2)
您不必创建Author
类型的新对象。将每个项目添加到数据库上下文后,可以直接调用SaveChanges。
尝试:
foreach(Author objAuthor in listAuthor)
{
db.Author.AddObject(objAuthor);
}
db.SaveChanges();
答案 1 :(得分:1)
您可以在列表中添加元素:
List<Authors> listAuthor = new List<Authors>();
Author objAuthor = new Author();
listAuthor.Add(objAuthor);
但是既然你提到EF,我猜你有一个数据库上下文,你可以直接添加实体并保留更改:
Author objAuthor = new Author();
db.Authors.Add(objAuthor);
db.SubmitChanges();
答案 2 :(得分:0)
问题在于您的转化方式。看看您的代码,您要做的是......将List<Authors>
分配给Author
类的实例。真的它根本不可能......你不得不反对它..
修改强> 多个Update遗憾的是还没有办法。我可以建议你做什么..为你的多行准备XML。并使用XML插入并使用常规存储过程,通过这种方式,您可以一次插入任意数量的行,并且只能在One Hit到DB中插入。