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

二、以Material_Message为例,添加类文件Material_MessageExt
- 创建类Material_Message,并添加关键字partial
- 创建类MaterialMessageValidate。
- 在MaterialMessageValidate类中添加和Material_Message相同的属性,在属性上添加所需的特性,本例以Display特性为例
- 在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>
运行结果:
