C# EntityFramework DbFirst的情况下为实体添加各种特性(不需要T4模板)

在开发的过程需要给实体添加特性,为了方便选择的EF的codeFirst。但是后期需要用到视图,codeFirst映射视图的方式在网上找了很久都没有找到合适的办法,而且采用dbFirst的情况下,为实体添加特性又成了难题,虽然说学习T4模板是个好办法,但是却感觉使用模板有很多限制。后来在传智播客的培训视频中找到了解决方法。因为这个视频很早了。方法有点老,但是很实用。

一、通过数据库创建实体

创建实体的办法,很简单网上也有很多方法。略········

实体如下

二、以Material_Message为例,添加类文件Material_MessageExt

  1. 创建类Material_Message,并添加关键字partial
  2. 创建类MaterialMessageValidate。
  3. 在MaterialMessageValidate类中添加和Material_Message相同的属性,在属性上添加所需的特性,本例以Display特性为例
  4. 在Material_Message添加特性[MetadataType(typeof(MaterialMessageValidate))]。这个特性的是让Material_Message共享MaterialMessageValidate中的元数据。
    [MetadataType(typeof(MaterialMessageValidate))]
        public partial class Material_Message
        {
        }
    
        public class MaterialMessageValidate
        {
            [Display(Name = "器材编号")]
            public string Material_Id { get; set; }
    
            [Display(Name = "器材名称")]
            public string Material_Name { get; set; }
    
            [Display(Name = "器材类型")]
            public string Material_Type_Name { get; set; }
    
            [Display(Name = "器材总量")]
            public double Material_Count { get; set; }
    
            [Display(Name = "器材余量")]
            public double Material_Remain_Count { get; set; }
    
            [Display(Name = "计量单位")]
            public string Material_Count_Unit { get; set; }
    
            [Display(Name = "供货商")]
            public string Company_Name { get; set; }
    
            [Display(Name = "器材价格")]
            public double Material_Price { get; set; }
    
            [Display(Name = "备注")]
            public string Material_Remark { get; set; }
        }

     

然后,实体就会具有特性了,创建页面

<body>
    <div style="padding: 50px; padding-left: 0;padding-bottom: 0">
        @using (Ajax.BeginForm("Add", "Material", new AjaxOptions() { HttpMethod = "POST", OnSuccess = "AfterSuccess" }, new Dictionary<string, object>() { { "class", "layui-form" }, { "lay-filter", "addForm" } }))
        {
            @Html.HiddenFor(m => m.Material_Id)
            <div class="layui-form-item">
                @Html.LabelFor(m => m.Material_Id, new { @class = "layui-form-label" })
                <div class="layui-input-block">
                    @Html.TextBoxFor(m => m.Material_Id, new { @class = "layui-input", @placeholder = "请输入编号" })
                </div>
            </div>
            <div class="layui-form-item">
                @Html.LabelFor(m => m.Material_Name, new { @class = "layui-form-label" })
                <div class="layui-input-block">
                    @Html.TextBoxFor(m => m.Material_Name, new { @class = "layui-input", @placeholder = "请输入名称" })
                </div>
            </div>
            <div class="layui-form-item">
                @Html.LabelFor(m => m.Material_Price, new { @class = "layui-form-label" })
                <div class="layui-input-block">
                    @Html.TextBoxFor(m => m.Material_Price, new { @class = "layui-input", @placeholder = "请输入价格" })
                </div>
            </div>
            <div class="layui-form-item">
                @Html.LabelFor(m => m.Material_Count, new { @class = "layui-form-label" })
                <div class="layui-input-block">
                    @Html.TextBoxFor(m => m.Material_Count, new { @class = "layui-input", @placeholder = "请输入总数量" })
                </div>
            </div>
            <div class="layui-form-item">
                @Html.LabelFor(m => m.Material_Remain_Count, new { @class = "layui-form-label" })
                <div class="layui-input-block">
                    @Html.TextBoxFor(m => m.Material_Remain_Count, new { @class = "layui-input", @placeholder = "请输入剩余数量" })
                </div>
            </div>
            <div class="layui-form-item">
                @Html.LabelFor(m => m.Material_Count_Unit, new { @class = "layui-form-label" })
                <div class="layui-input-block">
                    @Html.TextBoxFor(m => m.Material_Count_Unit, new { @class = "layui-input", @placeholder = "请输入单位" })
                </div>
            </div>
            <div class="layui-form-item">
                @Html.LabelFor(m => m.Company_Name, new { @class = "layui-form-label" })
                <div class="layui-input-block">
                    @Html.TextBoxFor(m => m.Company_Name, new { @class = "layui-input", @placeholder = "请输入供应商" })
                </div>
            </div>
            <div class="layui-form-item">
                @Html.LabelFor(m => m.Material_Remark, new { @class = "layui-form-label" })
                <div class="layui-input-block">
                    @Html.TextAreaFor(m => m.Material_Remark, new { @class = "layui-textarea", @placeholder = "请输入备注" })
                </div>
            </div>
            <div class="layui-form-item">
                <div class="layui-input-block">
                    <button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button>
                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                </div>
            </div>
        }
    </div>
</body>

运行结果: