2016-08-20 152 views
1

即时通讯学习实体框架,并已悲惨地失败与这项任务几天...我想实现以下数据库计划:实体框架一对多和多对多的关系

TableA: 
ClassA_ID 
ClassB_ID(foreign key - one to one) 

TableATableB:(one-to-many relationship) 
ClassA_ID 
ClassB_ID 

TableB: 
ClassA_ID(foreign key - one to one) 
ClassB_ID 

所以我实际上想要从A类到B类的特定一对一关系和从ClassA到ClassB的一对多关系。

我的C#代码如下所示:

A类:

public static int idcounter; 
[Key] 
public int id { get; set; } 
public virtual List<ClassB> allClassB { get; set; } 
public virtual ClassB currentClassB { get; set; } 
public int? currentClassBID { get; set; } 

public ClassA(){ 
    idcounter++; 
    id = idcounter; 
    allClassB = new List<ClassB>(); 
    currentClassB = new ClassB(); 
    currentClassBID = currentClassB.id; 
    MyContext.add(this); 
} 

B类:

public static int idcounter; 
[Key] 
public int id { get; set; } 
public virtual ClassA owner { get; set; } 
public int? ownerID { get; set; } 

public ClassB(ClassA a){ 
    idcounter++; 
    id = idcounter; 
    owner = a; 
    ownerID = a.id; 
} 

MyContext:

这个问题
public static void add(ClassA a) 
    { 
     using (MyContext context = new MyContext()) 
     { 
      context.setB.Add(a.currentClassB); 
      context.setA.Add(a); 
      context.SaveChanges();   
     } 
    } 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<ClassA>().HasOptional(x => x.currentClassB).WithMany().HasForeignKey(x => x.currentClassBID).WillCascadeOnDelete(false); 
     modelBuilder.Entity<ClassB>().HasOptional(x => x.ClassA).WithMany(x => x.allClassB).HasForeignKey(x => x.ownerID).WillCascadeOnDelete(false) ; 
    } 

它非常相似 Entity Framework Code First: How can I create a One-to-Many AND a One-to-One relationship between two tables? 但保存时我只是得到一个循环异常。

Unable to determine a valid ordering for dependent operations. Dependencies may 
exist due to foreign key constraints, model requirements, or store-generated 
values. 

它很奇怪的是

context.setA.Add(a); 

它添加到currentClassB没有allClassB我过上提,......它甚至突然确实,当我不

allClassB = new List<ClassB>(); 

我是什么做错了?

+0

谁需要编码规范啊? – Sinjai

回答