实体框架。在没有额外表和导航属性的实体上定义外键

时间:2015-04-16 23:55:53

标签: c# sql .net entity-framework


假设我有与我的实体相关的表个人资料 个人资料

[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

0 个答案:

没有答案