2014-03-13 14 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

相关问题