我目前正在学习实体框架,但不幸地在此任务上失败了几天,但我想实现以下数据库方案:
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类的特定一对一关系,以及从A类到B类的一对多关系。
我的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) ;
}
它与以下问题非常相似:实体框架代码优先:如何在两个表之间创建一对多和一对一关系?但是我在保存时只会收到循环例外。
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>();
我究竟做错了什么?
您必须使用InverseProperty
如下所示的方法。
[InverseProperty("allClassB")]
public virtual ClassB currentClassB { get; set; }
public int? currentClassBID { get; set; }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句