Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用具有fluent api的复合外键配置一对零或一关系_C#_.net_Entity Framework_Ef Code First - Fatal编程技术网

C# 使用具有fluent api的复合外键配置一对零或一关系

C# 使用具有fluent api的复合外键配置一对零或一关系,c#,.net,entity-framework,ef-code-first,C#,.net,Entity Framework,Ef Code First,我正在用EntityFramework6.1.0开发一个C.NETFramework4.0 我有一个现有的数据库,并用它生成了代码类 这些是我的课程: [Table("CODES")] public partial class CODE { public CODE() { } [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long ID_CODE { get; set; }

我正在用EntityFramework6.1.0开发一个C.NETFramework4.0

我有一个现有的数据库,并用它生成了代码类

这些是我的课程:

[Table("CODES")]
public partial class CODE
{
    public CODE()
    {
    }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long ID_CODE { get; set; }

    [Key]
    [Column(Order = 0)]
    public byte CODE_LEVEL { get; set; }

    [Key]
    [Column("CODE", Order = 1)]
    [StringLength(20)]
    public string CODE1 { get; set; }

    public byte? COMMISIONING_FLAG { get; set; }

    public bool? IS_TRANSMITTED { get; set; }

    public DateTime? TIMESPAN { get; set; }

    [StringLength(50)]
    public string USERNAME { get; set; }

    [StringLength(50)]
    public string SOURCE { get; set; }

    public virtual AGGREGATION_CHILDS AGGREGATION_CHILDS { get; set; }

    public virtual AGGREGATION AGGREGATIONS { get; set; }
}

public partial class AGGREGATION_CHILDS
{
    [Key]
    [Column(Order = 0)]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public long ID_AGGREGATION { get; set; }

    [Key]
    [Column(Order = 1)]
    [StringLength(20)]
    public string ID_CHILD { get; set; }

    [Key]
    [Column(Order = 2)]
    public byte CODE_LEVEL { get; set; }

    public int POSITION { get; set; }

    public virtual AGGREGATION AGGREGATION { get; set; }

    public virtual CODE CODE { get; set; }
}

[Table("AGGREGATIONS")]
public partial class AGGREGATION
{
    public AGGREGATION()
    {
        AGGREGATION_CHILDS = new HashSet<AGGREGATION_CHILDS>();
    }

    [Key]
    public long ID_AGGREGATION { get; set; }

    [StringLength(20)]
    public string ID_PARENT { get; set; }

    public byte? PARENT_LEVEL { get; set; }

    public virtual ICollection<AGGREGATION_CHILDS> AGGREGATION_CHILDS { get; set; }

    public virtual CODE CODE { get; set; }
}
以及代码和聚合之间的另一种一对一关系

但在聚合中,外键是可选的:ID\u PARENT和PARENT\u LEVEL可以为NULL

如何在OnModelCreating上设置这两种关系

public partial class MyDbContext : DbContext
{
    public MyDbContext()
        : base("name=MyDbContext")
    {
    }

    public virtual DbSet<AGGREGATION_CHILDS> AGGREGATION_CHILDS { get; set; }
    public virtual DbSet<AGGREGATION> AGGREGATIONS { get; set; }
    public virtual DbSet<CODE> CODES { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AGGREGATION>()
            .HasMany(e => e.AGGREGATION_CHILDS)
            .WithRequired(e => e.AGGREGATION)
            .WillCascadeOnDelete(false);
    }
}
CODES.CODE1      -> AGGREGATION_CHILDS.ID_CHILD
CODES.CODE_LEVEL -> AGGREGATION_CHILDS.CODE_LEVEL
CODES.CODE1      -> AGGREGATION.ID_PARENT
CODES.CODE_LEVEL -> AGGREGATION.PARENT_LEVEL