EF为外键添加了额外的列

时间:2015-04-22 04:46:37

标签: c# entity-framework

我使用数据注释来获取外键。 EF成功构建了一些列,但为某些属性添加了额外的列。 这是我的班级:

public class Class
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column(TypeName = "BIGINT")]
    public Int64 LiIdH { get; set; }

    [Column(TypeName = "BIGINT"), Index(IsUnique = true)]
    public Int64 LiIdPeriod { get; set; }
    public virtual ZPeriod ZPeriod { get; set; }

    [Column(TypeName = "SMALLINT"), Index(IsUnique = true)]
    public Int16 SWhCode { get; set; }
    public virtual InvtWare InvtWare { get; set; }
}

我希望将LiIdPeriodSWhCode作为外键。 EF将LiIdPeriod添加为外键,但对于SWhCode,它只会添加一个名为InvtWare_SWhCode的额外列。 如何解决此问题并将SwhCode作为外键?我更喜欢数据注释和属性到流畅的API。

1 个答案:

答案 0 :(得分:2)

您可以通过两种不同的方式为实体框架指定外键。

  1. 使用数据注释
  2. 使用Fluent API
  3. 使用数据注释

    [Column(TypeName = "SMALLINT"), Index(IsUnique = true)]
    public Int16 SWhCode { get; set; }
    [ForeignKey("SWhCode")] 
    public virtual InvtWare InvtWare { get; set; }
    

    使用Fluent API

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        // Assuming one to many relationship
        modelBuilder.Entity<Class>().HasRequired(d =>d.InvtWare).WithMany(d => d.Classes).HasForeignKey(d => d.SwhCode);
    }