EF架构~为EF DbContext生成的实体添加Display特性——实战篇

研究Entity Framework,把Display特殊也做在T4模板里,实现在前台绑定时,就把信息自动显示出来了,是不是感觉很方便?

EF架构~为EF DbContext生成的实体添加Display特性——实战篇_第1张图片

接下来,就让我们一起来探索Display吧!

第一步:在.tt模板中查找:Property。

EF架构~为EF DbContext生成的实体添加Display特性——实战篇_第2张图片

查找到把下面的代码修改覆盖上:

public string GetRemark(EdmProperty edmProperty){  
        //System.Diagnostics.Debugger.Launch();  
        var tableName = edmProperty.DeclaringType.Name;  
        var colName=_code.Escape(edmProperty);  
        //System.Diagnostics.Debugger.Break();  
        string sql = string.Format(@"SELECT  字段说明=isnull(props.[value],' ')  FROM syscolumns cols  inner join sysobjects objs on cols.id= objs.id and  objs.xtype='U' and  objs.name<>'dtproperties' left join sys.extended_properties props on cols.id=props.major_id and cols.colid=props.minor_id  where  objs.name='{0}' and cols.name='{1}'",tableName,colName);  
        string sqlcon = "Data Source=.;User ID=sa;Password=123456;Initial Catalog=TxlDB";  
        object remark=new object();  
        using(System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(sqlcon)){  
            conn.Open();  
            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sql, conn);  
            remark =cmd.ExecuteScalar();   
			return remark.ToString();   
        }
		}
    public string Property(EdmProperty edmProperty)
    {
        return string.Format(
            CultureInfo.InvariantCulture,
            "[Display(Name=\"{5}\")]\n{0} {1} {2} {{ {3}get; {4}set; }}",
            Accessibility.ForProperty(edmProperty),
            _typeMapper.GetTypeName(edmProperty.TypeUsage),
            _code.Escape(edmProperty),
            _code.SpaceAfter(Accessibility.ForGetter(edmProperty)),
            _code.SpaceAfter(Accessibility.ForSetter(edmProperty)), GetRemark(edmProperty));
    }

EF架构~为EF DbContext生成的实体添加Display特性——实战篇_第3张图片

在这里:你要对字符串修改,修改数据库  姓名: sa   密码:123 , 数据库名称:ZHDb(this is我的数据库名称)。

第三步:保存。打开你的实体。

EF架构~为EF DbContext生成的实体添加Display特性——实战篇_第4张图片

第四步:修改提示:选择 using System.ComponentModel.DataAnnotations;  或者你自己添加也可以。

这时候所有实体都是报错状态!所以需要在一个.cs中生成引用字串,剪切到.tt模板内让它对所有.cs实体都起影响。

EF架构~为EF DbContext生成的实体添加Display特性——实战篇_第5张图片

将产生的using System.ComponentModel.DataAnnotations;剪贴,我们要拿到.tt模板中,让它对所有实体都起作用。

EF架构~为EF DbContext生成的实体添加Display特性——实战篇_第6张图片

最终:返回.tt模板,快捷键ctrl+F 打开搜索框:BeginNamespace。将剪切的字符串复制到如下位置,保存 OK。

EF架构~为EF DbContext生成的实体添加Display特性——实战篇_第7张图片


EF架构~为EF DbContext生成的实体添加Display特性——实战篇_第8张图片

你可能感兴趣的:(自学,哪有视频都研究文档)