实体框架一对多和多对多关系

米勒

我目前正在学习实体框架,但不幸地在此任务上失败了几天,但我想实现以下数据库方案:

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; }

DataAnnotations-InverseProperty属性:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架一对多和多对多关系

来自分类Dev

实体框架6中的一对多和一对多关系

来自分类Dev

一对多和多对多关系实体框架,包括默认授权和角色管理

来自分类Dev

实体框架多对多关系

来自分类Dev

实体框架核心:与同一对象的多对多关系

来自分类Dev

一对多和多对多关系的REST URL设计

来自分类Dev

与实体框架核心中同一实体的多对多关系

来自分类Dev

学说一对多关系和多对一关系

来自分类Dev

Odata和实体框架,多对多关系不会更新

来自分类Dev

实体框架4.2一对多关系

来自分类Dev

实体框架:一对多关系

来自分类Dev

实体框架一对多关系错误

来自分类Dev

如何首先在代码中定义两个实体之间的多对多和一对多关系?

来自分类Dev

实体框架多对多关系删除

来自分类Dev

实体框架中的多对多关系

来自分类Dev

实体框架核心-与多对多关系的问题

来自分类Dev

更新多对多关系实体框架

来自分类Dev

实体框架与主键多对多关系

来自分类Dev

实体框架:多对多关系的ID列表

来自分类Dev

实体框架多对多关系访问数据

来自分类Dev

多个多对多关系实体框架

来自分类Dev

更新实体框架中的多对多关系

来自分类Dev

实体框架中的多对多关系

来自分类Dev

实体框架多对多关系错误

来自分类Dev

使用实体框架和GraphQl基于“一对多”的逆关系映射

来自分类Dev

一对一,一对多和多对多关系绩效计算

来自分类Dev

Django多对一/一对多关系

来自分类Dev

一对多与多对多关系

来自分类Dev

实体框架同一实体上的一对多关系