2017-02-27 40 views
0

我想保存和使用代码优先的方法数据库加载分层数据。加载分层对象与实体框架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; 
     } 
    } 

,当它试图获得的第一个元素的孩子的错误:

消息“乐JEU德entites的OU L'进口德fonction 'Element_elements' n'est PASdéfini丹斯乐conteneur d'Entités 'DatabaseContext'。 。Rapprochéidentificateur地方丹斯UNE序列 D'échappement,LIGNE 1,Colonne的73”字符串

DAV

回答

0

错误来自我在已经暴露了属性 “元素” 的对象,他们是:

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

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

这是一个有点傻和EF不知道如何链接这一点。我只是去掉了“元素”,它让所有的孩子。