在实体框架中定制实体

时间:2012-05-16 07:20:01

标签: entity-framework

我有以下问题:我在数据库中有一个名为Person的表,其中包含所有相关数据,如名字,姓氏,出生日期,性别等....我的问题是:是否可以隐藏一些属性,如果是,我怎样才能实现这一点。我需要这个,因为在我的实体而不是出生日期,我想要一个名为age的属性,它将采用出生日期并计算年龄。另外,我想隐藏另一个名为job的列,其默认值N为no,也可以为Y.而不是它我想拥有相同的列,但有真或假。我知道我可以实现更改数据库,但就我而言,我不允许这样做。最后一点:是否需要添加在数据库中没有表示的其他列...例如,计算属性工资并基于它的计算结果(例如,如果它大于或小于500欧元) )计算奖金?谢谢:)

1 个答案:

答案 0 :(得分:1)

将您的上下文和实体放入单独的项目中。您描述的 Person 实体可以按如下方式完成:

public class Person
{
    public string FirstName { get; set; }

    public string LastName { get; set; }

    internal DateTime DateOfBirth { get; set; }
    [System.ComponentModel.DataAnnotations.Schema.NotMapped]
    public double AgeInYears { get { return DateTime.Now.Subtract(this.DateOfBirth).TotalDays / 365; } }

    public char Sex { get; set; }

    internal string Job { get; set; }
    [System.ComponentModel.DataAnnotations.Schema.NotMapped]
    public bool HasJob { get { return this.Job == "Y"; } }
}

执行上述操作只会将FirstName,LastName,AgeInYears,Sex和HasJob以您想要的数据类型公开给其他项目。

要添加数据库中不存在的列,只需使用上面显示的相应Data Annotation

要隐藏列,请将其标记为内部。

希望有所帮助。