用于数据层的 C# Entity Framework 类生成器






4.96/5 (13投票s)
每当您使用实体框架开发项目时,您都需要创建一个数据层类,使用不同的方法访问模型中的每个对象。这个生成器会为您完成这项工作。
引言
我为自己编写了这个工具,使用基于模板文件的实体框架创建数据层类。它连接到 SQL 服务器并读取表、视图及其列。只需点击一下,它就会生成您可以实现到您的项目中的基本数据层类。
您可以修改代码模板文件(已包含),将其翻译成 VB 或添加您缺少的方法。
连接到 SQL 服务器
首先,需要建立与您的 SQL 服务器的连接。
代码生成器
现在,您输入一些与项目相关的变量,选择一个表,选择主键列和排序方式,然后单击“生成类”。瞧。
生成的方法
在模板文件中,生成了一些默认方法。如果您的表包含“DELETED”、“CREATED”、“UPDATED”(它们都是日期时间)之类的列,此生成器将决定需要生成哪一行。
示例:您有一个列“DELETED”(日期时间)用于标记删除时的记录,此生成器会检测到这一点。
将为表生成以下方法
- 创建 (记录)
- 更新 (记录)
- DeleteById (记录)
- DropById (记录)
- GetById (记录)
- GetList (记录列表)
- CleanMarkedAsDeleted (删除标记为删除的记录)
将为视图生成以下方法
- GetById (记录)
- GetList (记录列表)
附加组件
有两个额外的选项可用
- 生成 DatabaseException 类,该类只需要在每个项目中生成一次。
- 生成一个类,用于获取 MVC 项目的 SelectList。您可以在您的 ViewModel 中非常轻松地使用它来使用数据填充组合框和列表。
在您的目标项目中使用生成的代码
一旦您将生成的类实现到您的 EF 项目中,您就可以这样使用它。
一个基于模型对象 VEREIN 的示例
获取所有 VEREIN 对象的列表
List<VEREIN> lst = EF.Verein.GetList();
获取一个特定的 VEREIN 对象
Guid id = new Guid("7125A5EA-25EA-4C3F-A123-415506246359"); VEREIN verein = EF.Verein.GetByID(id);
使用此类的完整上下文菜单
异常
生成的类将需要 DatabaseException 类一次,您可以在其中根据需要填写事件。生成的异常类
using System; using System.Runtime.Serialization; /// <summary> /// Code generated 01.07.2017 09:50:23 by EFClassGenerator version 1.0.0.0 /// Template last modified 2017-06-23 /// </summary> namespace TestProject { [Serializable] public class DatabaseException : Exception { // Constructors public DatabaseException(string message) : base(message) { } public DatabaseException(string message, Exception innerException) : base(message) { } public DatabaseException(string format, params object[] args) : base(string.Format(format, args)) { } // Ensure Exception is Serializable protected DatabaseException(SerializationInfo info, StreamingContext ctxt) : base(info, ctxt) { } } }
SelectList
仅适用于 MVC (ASP) 项目,但对在视图中填充组合框非常有帮助。
此生成的代码将返回一个 MVC List<SelectListItem>,其中填充了所有 VEREIN 记录(ID 和 Name),用于组合框。
using System; using System.Collections.Generic; using System.Linq; using TestProject.Models; using System.Web.Mvc; /// <summary> /// Code generated 01.07.2017 15:44:16 by EFClassGenerator version 1.0.0.0 /// Template last modified 2017-06-23 /// </summary> namespace TestProject.EF { class SelList_Verein { private const string exceptionMessage = "A database exception occurred"; /// <summary> /// Returns a SelectListItem list of model objects out of database /// </summary> /// <returns> A list of SelectListItem - List of model object</returns> public static List<SelectListItem> GetList() { try { List<SelectListItem> sellist = new List<SelectListItem>(); using (EFDataClassGeneratorEntities model = new EFDataClassGeneratorEntities()) { var list = model.VEREIN.OrderBy(w => w.VEREIN_NAME).ToList(); foreach (VEREIN item in list) { sellist.Add(new SelectListItem { Value = item.VEREIN_ID.ToString(), Text = item.VEREIN_NAME }); } return sellist; } } catch (Exception ex) { throw new DatabaseException(exceptionMessage, ex); } } } }
来源
我不是企业开发人员,而且除了您自己的代码外,其他人的代码总是有一些错误。将此示例作为灵感。随意更改源代码,编辑模板文件,做您想做的事情。
但是,请不要批评编码方式。
任何其他反馈都非常受欢迎。
历史
我将自己增强这个项目。我猜想以后的版本不会再由我发布在这里了。
2017/07/20
更新了源代码并修复了一些错误