外键关系

Foreign key relationship

我正在尝试使用以下两个设置外键 类。 我想将 pAcqType 用作枚举并将类型的名称存储在另一个 table 中。我应该如何设置我的 类 来执行此操作?

public class Property
{
    [Key]
    public int pID { get; set; }
    public string pAddress { get; set; }
    public string pCounty { get; set; }
    public string pCity { get; set; }
    public string pState { get; set; }
    public string pzip { get; set; }
    public virtual PropertyAcquisitionType pAcqType { get; set; }    <-- foreign key      
}

public class PropertyAcquisitionType
{
    [Key]        
    public int patID { get; set; }        
    public string patName { get; set; }
}

更新

丹让我思考。我尝试了以下方法,似乎已经成功了。 它像我想要的那样在 table 上设置外键。而且它甚至没有要求对另一个 table.

进行反转
    public int? pAcqType { get; set; }
    [ForeignKey("pAcqType")]
    public PropertyAcquisitionType patID { get; set; }

是否需要外键(数据库中NOT NULL)?

public int pAcqTypeId { get; set; }
[ForeignKey("pAcqTypeId")]
public virtual PropertyAcquisitionType pAcqType { get; set; }

否则,

public int? pAcqTypeId { get; set; }
[ForeignKey("pAcqTypeId")]
public virtual PropertyAcquisitionType pAcqType { get; set; }

然后在你的另一个class中添加一个反比关系:

public class PropertyAcquisitionType
{
    [Key]        
    public int patID { get; set; }        
    public string patName { get; set; }
    [InverseProperty("pAcqType")]
    public virtual ICollection<Property> pOfThisType { get; set; }
}

这是您可以使用流畅的 API 定义关系的一种方式(在实体 classes 中没有属性)。注意使用此方法,您不需要在 PropertyAcquisitionType 实体上添加 properties 属性 来满足关系的反面,因为 .WithMany() 告诉 EF 它是什么需要知道:

public class MyDbContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Property>()
            .HasKey(x => x.pID)
            .HasRequired(x => x.pAcqType) // or HasOptional if using int?
            .WithMany() // or WithMany(x => x.pOfThisType) if you want to add / keep the inverse property
            .HasForeignKey(x => x.pAcqTypeId)
        ;
    }
}