【问题标题】:How to configure One-to-One Relationship in Entity Framework, Code First如何在实体框架中配置一对一关系,代码优先
【发布时间】:2014-09-23 16:38:20
【问题描述】:

首先,我遵循此链接中的示例:http://blog.bennymichielsen.be/2011/06/02/entity-framework-4-1-one-to-one-mapping/,这看起来很可靠,但是当我尝试创建脚手架时,它崩溃了,给我没有导航键的错误。

这是我的代码:

负责班级:

 public class CodigoAgrupadorCuentas 
 {
    public CodigoAgrupadorCuentas()
    {
        CatalogoDeCuentas = new CatalogoDeCuentas();
    }

    public int CodigoAgrupadorCuentasID { get; set; }

    public string description { get; set; }

    public virtual CatalogoDeCuentas CatalogoDeCuentas { get; set; }

}

依赖类:

public class CatalogoDeCuentas       
 {

    [ForeignKey("CodigoAgrupadorCuentasID")]
    public int CodigoAgrupadorCuentasID { get; set; }

    public string text { get; set; }

}

DbContext 类:

public class PolizasDBContext: DbContext
{
      public PolizasDBContext()
        : base("PolizasDBContext")
    { 

    }

      public DbSet<CatalogoDeCuentas> TablaCatalogoDeCuentas { get; set; }
      public DbSet<CodigoAgrupadorCuentas> TablaCodigoAgrupCuentas { get; set; }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

        modelBuilder.Entity<CodigoAgrupadorCuentas>()
            .HasRequired(x => x.CatalogoDeCuentas)
            .WithRequiredPrincipal();
        base.OnModelCreating(modelBuilder);

    }

}

最后,这是我尝试搭建 CatalogoDeCuentas 时得到的错误图像:

总而言之,我想要的是能够创建一个一对一的关系,我可以在其中单独插入 COdigoAgrupadorCuentas,但不能插入 CatalogoDeCuentas。

我已经被这个简单的问题困扰了几个小时,感谢任何帮助。

【问题讨论】:

    标签: c# entity-framework ef-code-first one-to-one table-relationships


    【解决方案1】:

    您好,我认为您需要指定属性[ForeignKey("CodigoAgrupadorCuentasID")] 以上public virtual CuentasDelMes CuentasDelMes { get; set; }

    像这样:

    public class CatalogoDeCuentas       
    {
       public int CodigoAgrupadorCuentasID { get; set; }
       public string text { get; set; }
    
       [ForeignKey("CodigoAgrupadorCuentasID")]
       public virtual CuentasDelMes CuentasDelMes { get; set; }
    }
    

    【讨论】:

    • 嗨,Jordy,我很抱歉,我犯了一个错误,忘记从我发布的代码中删除 CuentaDelMes,这是实体拥有的另一种关系,我之前已经对其进行了测试。我已经更新了我的帖子,删除了那行代码。如果您想查看示例,我的代码完全基于我提供的链接的末尾。在此之前我也已经尝试过其他方法,但是尝试向表中插入数据时总是出现问题。
    • @JorgeDíaz 问题仍然存在,但现在在另一堂课上,我想看看我回答中的前两行
    【解决方案2】:

    经过更多研究,我找到了问题的答案。以下是代码的结束方式:

    负责班级:

    public class CodigoAgrupadorCuentas
    {
        public int CodigoAgrupadorCuentasID { get; set; }
        public string text { get; set;}
    
        public virtual CatalogoDeCuentas CatalogoDeCuentas { get; set; }
    
    }
    

    依赖类:

    public class CatalogoDeCuentas  
    {
    
        public int CodigoAgrupadorCuentasID { get; set; }
        public string description { get; set; }
    
        public virtual CodigoAgrupadorCuentas CodigoAgrupadorCuentas { get; set; }
    
    }
    

    上下文类:

       public class PolizasDBContext: DbContext
    {
          public PolizasDBContext()
            : base("PolizasDBContext")
        { 
    
        }
    
          public DbSet<CatalogoDeCuentas> TablaCatalogoDeCuentas { get; set; }
          public DbSet<CodigoAgrupadorCuentas> TablaCodigoAgrupCuentas { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    
            modelBuilder.Entity<CodigoAgrupadorCuentas>()
                .HasOptional(x => x.CatalogoDeCuentas)
                .WithRequired(x => x.CodigoAgrupadorCuentas);
            base.OnModelCreating(modelBuilder);
    
        }
    
    }
    

    我从以下堆栈溢出问题中得到了答案:Entity Framework Code First : Setting up One-To-One foreign key association using Annotations

    非常感谢阅读此问题的任何人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2015-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多