如何在不更改数据库模型的情况下在Entity Framework中添加新的实体属性

anu*_*anu 4 c# asp.net-mvc entity-framework entity-framework-6

我是Entity Framework的新手.我从数据库第一种方法开始,创建了与我选择的表对应的类.我在用MVC.我的一个表中有一Date列.我的要求是我想在我的gridview(网格MVC)中显示Day,即如果获取的特定记录的日期是10/27/2015,那么Day应该显示Tues.我想这样做,而不是在我的数据库中添加额外的列.有没有办法解决这个问题.任何帮助将不胜感激.

我生成的模型类如下: -

public partial class QnsNew1
    {
        public int Id { get; set; }
        public Nullable<System.DateTime> Date { get; set; }
        public Nullable<int> PersonelID { get; set; }
        public string CType { get; set; }
        public string Comments { get; set; }
        //public string Day { get; set; }//I want to avoid doing this
        public virtual Personnel Personnel { get; set; }
        public virtual Type Type { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

Bis*_*hoy 18

更好的方法

虽然这可以通过实体框架轻松完成,但正如其他答案所指出的那样,并且我100%承认,通过创建与常规实体分开的ViewModel并将计算结果放在一起,最好将表示/ UI模型与数据库模型分开那里的财产.

如果您遇到EF,请继续阅读

在EntityFramework Database First模式中,为数据库模型生成的类是分部类.您基本上可以创建另一个具有相同名称的部分类,并在相同的程序集和命名空间中,并在那里添加您的计算属性.

这是一个完整的例子(从这里的答案中借用一周的实施日期):

public partial class MyTable
{
    [NotMapped]
    public string DayOfWeek
    { 
        get 
        { 
            if (Date.HasValue)
                return DateTime.Now.DayOfWeek.ToString();
            else
                return null;
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

确保命名空间与生成的类相同非常重要.此外,您必须使用属性注释该属性,NotMapped以便EF不会尝试将该属性映射或保存回数据库.