假设我有与我的实体相关的表个人资料 个人资料
[Table("Profiles")]
public class Profile: BaseBusinessEntity {
// Foreign key to the 'Members' table
// one-to-one relation
public int MemberId{
get;
set;
}
public DateTime? DateOfBirth{
get;
set;
}
#region === GEO PROPERTIES ===
public int? CountryId{
get;
set;
}
public int? RegionStateId{
get;
set;
}
public int? CityId{
get;
set;
}
public int? ReligionId{
get;
set;
}
public int? OrientationId{
get;
set;
}
#endregion
public virtual Members.Member Member{
get;
set;
}
public virtual City City{
get;
set;
}
public virtual Country Country{
get;
set;
}
public virtual RegionState RegionState{
get;
set;
}
public virtual ProfileMap ProfileMap{
get;
set;
}
}
我对' OrientationId' 和' ReligionId' 的属性存在问题。它们应该是表格的外键' Orientations'和宗教'分别,但我不想创建表格' Religions'只是为了拥有几个价值观(基督教,伊斯兰教,佛教,印度教)或“定位”和#39;表只有三个值(直,同性恋,双性恋)
我打算通过创建表' ProfileAttributes' 和' ProfileAttributeValues' 来避免这种情况,并将方向保存为配置文件属性名为' Orientation'使用' ProfileAttributeValues' 中的预定义值,并将宗教信息保存为名为' Religion'使用' ProfileAtributeValues' 表中的预定义值。
[Table("ProfileAttributes")]
public class ProfileAttribute : BaseLookupEntity {
public ProfileAttribute(){
HasMultipleValues = false;
}
public bool HasMultipleValues{
get;
set;
}
public virtual IList<ProfileAttributeValue> Values{
get;
set;
}
}
[Table("ProfileAttributeValues")]
public class ProfileAttributeValue : BaseBusinessEntity {
public int Id{
get;
set;
}
public int ProfileAttributeId{
get;
set;
}
public int TypeId{
get;
set;
}
public int? IntValue{
get;
set;
}
public string CharValue{
get;
set;
}
public string StringValue{
get;
set;
}
public string String100Value{
get;
set;
}
public byte[] BinaryValue{
get;
set;
}
[NotMapped]
public ProfileAttributeValueType Type{
get{
return (ProfileAttributeValueType) TypeId;
}
}
public virtual ProfileAttribute ProfileAttribute{
get;
set;
}
}
现在我需要以某种方式将&#39; OrientationId&#39; 和&#39; ReligionId&#39; 属性作为引用的外键&#39; ProfileAttributeValues&#39; 表。我的意思是创建一个约束,只允许存在于&#39; ProfileAttributeValues&#39;中的那些ID。使用EF的Fluent API 。