2014-03-13 17 views
0

我有一個xml文件,通過使用serializer.Serialize()方法序列化對象來創建。如何將序列化的XML數據移動到實體框架代碼的第一個數據庫?

XML文件simular這種結構:

<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.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(); 
     } 
+0

而不是告訴我們你做了什麼,顯示一些代碼不是很好嗎? –

+0

好點。我已經添加了一些代碼 – Stonybrooks

+0

但我想,我有一個問題,是:是否有一些神奇的方式通過實體框架來處理這種情況?或者其他一些可以用xml數據中的數據創建數據庫的奇特組件 – Stonybrooks

回答

0

我設法得到它現在的工作:-)

我做了對於初學者來說,是將數據保存到數據庫中一點一點的時間。首先是這本書。然後是章節。等等等等。

而且我移動:

db.SaveChanges() 

到嵌套的foreach循環,使數據,同時循環,等待,直到最後insteed得到了保存到數據庫中。我懷疑這只是爲了處理很多數據。

+0

您應該使用該循環的Count並在調用SaveChanges()時調用if(i% 100)db.SaveChanges(); – NicoJuicy

+0

是的,你是對的:) – Stonybrooks

相關問題