[英]how to move serialized xml data to a entity framework code first database?
我有一個通過使用serializer.Serialize()方法序列化對象而創建的xml文件。
xml文件具有與此類似的結構:
<book id="1">
<section id="1">
<chapter id="1">
<line id="1">
text...
</line>
<line id="2">
more text...
</line>
</chapter>
<chapter id="2">
<line id="1">
text...
</line>
</chapter>
</section>
</book>
我想將創建的xml移至MSSQL數據庫,並使用實體框架來處理MVC站點中的數據庫。
我試圖在MVC項目中通過EF創建數據庫。
我所做的是,將數據加載到對象中。 然后,我嘗試使用dbcontext將數據寫入db上下文中的新對象。 一切順利,但是當我調用db.SaveChanges()時,沒有任何數據保存在數據庫中。
如何解決我的問題的任何幫助都將非常好。
代碼示例:
// THE DBCONTEXT
public class BookContext : DbContext
{
public DbSet<DbBook> Books { get; set; }
public DbSet<DbSection> Sections { get; set; }
public DbSet<DbBook> Books { get; set; }
public DbSet<DbChapter> Chapters { get; set; }
public DbSet<DbVers> Verses { get; set; }
public DbSet<DbCrossRefence> CrossReferences { get; set; }
}
// TRYING TO WRITE DATA TO DB
Book xmlBook = Book.Load("C://book.xml");
using (var db = new BookContext())
{
DbBook book = new DbBook();
book.Id = "My book";
if (book.Sections == null)
{
book.Sections = new List<DbSection>();
}
foreach (Section s in xmlBook.Sections)
{
DbSection section = new DbSection();
section.Id = s.Id.ToString();
if (section.Books == null)
{
section.Books = new List<DbBook>();
}
foreach (Book b in s.Books)
{
DbBook book = new DbBook();
book.Id = b.Id;
if (book.Chapters == null)
{
book.Chapters = new List<DbChapter>();
}
foreach (Chapter c in b.Chapters)
{
DbChapter chapter = new DbChapter();
chapter.Id = c.Id;
if (chapter.Verses == null)
{
chapter.Verses = new List<DbVers>();
}
foreach (Vers v in c.Verses)
{
DbVers vers = new DbVers();
vers.Id = v.Id;
vers.Content = v.Content;
if (vers.CrossReferences == null)
{
vers.CrossReferences = new List<DbCrossRefence>();
}
foreach (CrossReference cr in v.CrossReferences)
{
DbCrossRefence crossreference = new DbCrossRefence();
crossreference.RefId = cr.RefId;
crossreference.Id = cr.Id;
crossreference.Book = cr.Book;
crossreference.Chapter = cr.Chapter;
try
{
crossreference.Vers = cr.Vers;
}
catch (Exception ex)
{
}
vers.CrossReferences.Add(crossreference);
}
chapter.Verses.Add(vers);
}
book.Chapters.Add(chapter);
}
section.Books.Add(book);
}
book.Sections.Add(section);
}
db.SaveChanges();
}
我設法讓它現在開始工作:-)
我為初學者所做的就是一次將數據保存到數據庫一次。 首先是書。 然后是章節。 等等等等。
我移動了:
db.SaveChanges()
放入嵌套的foreach循環中,以便在循環時將數據保存到數據庫,而不要等到最后。 我懷疑這只是處理大量數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.