2017-02-27 4 views
0

データベースから階層的なデータを保存し、コードの最初の方法で読み込もうとしています。Entity Framework 6で階層オブジェクトをロード

マイオブジェクト:

public class Database 
{ 
    public int ID { get; set; } 
    public string name { get; set; } 
    public virtual List<ElementBase> elements { get; set; } 
    private string XMLpath; 
} 

public abstract class ElementBase : ObservableObject 
{ 
    [Key] 
    public int ID { get; set; } 

    public string name { get; set; } 

    public ElementBase() { } 
    public ElementBase(String name) 
    { 
     this.name = name; 
    } 

} 

    public class Element : ElementBase 
{ 
    protected string type; 
    public virtual List<ElementBase> elements { get; set;} 
} 
    public class Attribute : ElementBase 
{ 
    private string value; 
    private byte editable; 
} 

マイオブジェクト "データベース" は "ElementBase" のリストが含まれています。 「ElementBase」は複合パターン上に構築されています。

私の文脈では私は「データベース」しか持っていません。

public DbSet<NWViewer.Model.Database> Databases { get; set; } 

私はそのようなのSQLServerのデータベースを保存します。

public static void add(NW.Database db) 
    { 
     using (var dbContext = new DatabaseContext()) 
     { 
      dbContext.Databases.Add(db); 
      dbContext.SaveChanges(); 
     } 
    } 

それは、サーバー上のデータベースとElementBaseテーブルを作成します。

Table Diagram

そして最後に、私がしようデータベースを取得するには、最初の子要素を持つデータベースのみを取得します。

public static NW.Database update (NW.Database db) 
    { 
     using (var dbContext = new DatabaseContext()) 
     { 

      var originalDB = (from d in dbContext.Databases 
             where d.ID == db.ID 
             select d).First(); 
      dbContext.Entry(originalDB).CurrentValues.SetValues(db); 
      dbContext.SaveChanges(); 

      return originalDB; 
     } 
    } 

エラー、それは最初の要素の子を取得しよう:

メッセージ「ル賭け事ドールentitésのou L'輸入デfonction 'Element_elements' n'est PASdéfiniDANSルconteneur '' DatabaseContext 'です。 Rapprochéidentificateur場所DANS宇根シーケンス D'échappement、LIGNE 1、コロン73」の文字列

ダヴ

答えて

0

エラーは、私がで公開されている属性から来る 『エレメント』オブジェクト彼らはした。

public class Element : ElementBase 
    { 
     protected string type; 
     public virtual List<ElementBase> elements { get; set;} 

     public List<ElementBase> Elements 
     { 
      get { return this.elements; } 
     } 
    } 

これは少し愚かだったとEFはそれをリンクする方法を知りませんでした。私は単に「要素」を削除していると、それはすべての子を取得します。

関連する問題