外键关系
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)
;
}
}
我正在尝试使用以下两个设置外键 类。 我想将 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)
;
}
}